mirror of https://github.com/FreshRSS/FreshRSS.git
Use typographic quotes (#4133)
* Use typographic quotes * A few fixes * Fix * Fix not saved * Implement feedback * Detail * Revert spoken English fixes Left for a future dedicated discussion * More reverts * Final reverts * Final minor
This commit is contained in:
parent
916df412f5
commit
1acd3ab09b
|
@ -12,9 +12,9 @@ A clear and concise description of what the bug is.
|
|||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
1. Go to '…'
|
||||
2. Click on '…'
|
||||
3. Scroll down to '…'
|
||||
4. See error
|
||||
|
||||
**Expected behavior**
|
||||
|
|
|
@ -8,13 +8,13 @@ assignees: ''
|
|||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
A clear and concise description of what the problem is. Ex. I’m always frustrated when […]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
**Describe the solution you’d like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
**Describe alternatives you’ve considered**
|
||||
A clear and concise description of any alternative solutions or features you’ve considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
|
|
10
CHANGELOG.md
10
CHANGELOG.md
|
@ -1369,7 +1369,7 @@
|
|||
* Generate `base_url` during the installation and add a `pubsubhubbub_enabled` configuration key. [#865](https://github.com/FreshRSS/FreshRSS/issues/865)
|
||||
* Load configuration by recursion to overwrite array values. [#923](https://github.com/FreshRSS/FreshRSS/issues/923)
|
||||
* Cast `$limits` configuration values in integer. [#925](https://github.com/FreshRSS/FreshRSS/issues/925)
|
||||
* Don't hide errors in configuration. [#920](https://github.com/FreshRSS/FreshRSS/issues/920)
|
||||
* Don’t hide errors in configuration. [#920](https://github.com/FreshRSS/FreshRSS/issues/920)
|
||||
|
||||
|
||||
## 2015-05-31 FreshRSS 1.1.1 (beta)
|
||||
|
@ -1402,7 +1402,7 @@
|
|||
* Add some indications on password format
|
||||
* Bug fixing
|
||||
* Some shortcuts was never saved
|
||||
* Global view didn't work if set by default
|
||||
* Global view didn’t work if set by default
|
||||
* Minz_Error was badly raised
|
||||
* Feed update failed if nothing had changed (MySQL only)
|
||||
* CRON task failed with multiple users
|
||||
|
@ -1586,7 +1586,7 @@
|
|||
* UI
|
||||
* Séparation des descriptions des raccourcis par groupes
|
||||
* Revue rapide de la page de connexion
|
||||
* Amélioration de l'affichage des notifications sur mobile
|
||||
* Amélioration de l’affichage des notifications sur mobile
|
||||
* Revue du système de rafraîchissement des flux
|
||||
* Meilleure gestion de la file de flux à rafraîchir en JSON
|
||||
* Rafraîchissement uniquement pour les flux non rafraîchis récemment
|
||||
|
@ -1596,12 +1596,12 @@
|
|||
* Corrige fuite de mémoire
|
||||
* Meilleure tolérance aux flux invalides
|
||||
* Corrections divers
|
||||
* Ne déplie plus l'article lors du clic sur l'icône lien externe
|
||||
* Ne déplie plus l’article lors du clic sur l’icône lien externe
|
||||
* Ne boucle plus à la fin de la navigation dans les articles
|
||||
* Suppression du champ category.color inutile
|
||||
* Corrige bug redirection infinie (Persona)
|
||||
* Amélioration vérification de la requête POST
|
||||
* Ajout d'un verrou lorsqu'une action mark_read ou mark_favorite est en cours
|
||||
* Ajout d’un verrou lorsqu’une action mark_read ou mark_favorite est en cours
|
||||
|
||||
|
||||
## 2014-01-29 FreshRSS 0.7
|
||||
|
|
|
@ -31,7 +31,7 @@ Did you want to fix a bug? To keep a great coordination between collaborators, y
|
|||
1. Be sure the bug is associated to a ticket and say you work on it.
|
||||
2. [Fork this project repository](https://help.github.com/articles/fork-a-repo/).
|
||||
3. [Create a new branch](https://help.github.com/articles/creating-and-deleting-branches-within-your-repository/). The name of the branch must be explicit and being prefixed by the related ticket id. For instance, `783-contributing-file` to fix [ticket #783](https://github.com/FreshRSS/FreshRSS/issues/783).
|
||||
4. Make your changes to your fork and [send a pull request](https://help.github.com/articles/using-pull-requests/) on the **edge branch**. Don't forget to add your name to CREDITS.md if you're contributing to FreshRSS for the very first time.
|
||||
4. Make your changes to your fork and [send a pull request](https://help.github.com/articles/using-pull-requests/) on the **edge branch**. Don’t forget to add your name to `CREDITS.md` if you’re contributing to FreshRSS for the very first time.
|
||||
|
||||
If you have to write code, please follow [our coding style recommendations](https://freshrss.github.io/FreshRSS/en/developers/01_First_steps.html).
|
||||
|
||||
|
@ -39,7 +39,7 @@ If you have to write code, please follow [our coding style recommendations](http
|
|||
|
||||
## Submit an idea
|
||||
|
||||
You have great ideas, yes! Don't be shy and open [a new ticket](https://github.com/FreshRSS/FreshRSS/issues/new) on our bug tracker to ask if we can implement it. The greatest ideas often come from the shyest suggestions!
|
||||
You have great ideas, yes! Don’t be shy and open [a new ticket](https://github.com/FreshRSS/FreshRSS/issues/new) on our bug tracker to ask if we can implement it. The greatest ideas often come from the shyest suggestions!
|
||||
|
||||
If your idea is nice, we’ll have a look at it.
|
||||
|
||||
|
|
|
@ -332,7 +332,7 @@ A [docker-compose.yml](docker-compose.yml) file is given as an example, using Po
|
|||
* the `environment` section to adapt the strategy to update feeds.
|
||||
* the `EXPOSED_PORT` variable in the `.env` file;
|
||||
|
||||
If you don't want to use the `.env` file you can also directly edit the `docker-compose.yml` file. It's highly recommended to change the password. If you don't change it, it will use the default option.
|
||||
If you don’t want to use the `.env` file you can also directly edit the `docker-compose.yml` file. It’s highly recommended to change the password. If you don’t change it, it will use the default option.
|
||||
|
||||
You can then launch the stack (FreshRSS + PostgreSQL) with:
|
||||
|
||||
|
|
|
@ -191,7 +191,7 @@ Vous pouvez utiliser la [ligne de commande](cli/README.md) pour exporter votre b
|
|||
```
|
||||
|
||||
> Il est impératif que le nom du fichier contenant la base de données ait une extension `sqlite`.
|
||||
Si ce n'est pas le cas, la commande ne fonctionnera pas correctement.
|
||||
Si ce n’est pas le cas, la commande ne fonctionnera pas correctement.
|
||||
|
||||
Vous pouvez encore utiliser la [ligne de commande](cli/README.md) pour importer la base de données au format SQLite dans votre base de données:
|
||||
|
||||
|
@ -199,11 +199,11 @@ Vous pouvez encore utiliser la [ligne de commande](cli/README.md) pour importer
|
|||
./cli/import-sqlite-for-user.php --user <username> --filename </path/to/db.sqlite>
|
||||
```
|
||||
|
||||
> Encore une fois, il est impératif que le nom du fichier contenant la base de données ait une extension `sqlite`. Si ce n'est pas le cas, la commande ne fonctionnera pas correctement.
|
||||
> Encore une fois, il est impératif que le nom du fichier contenant la base de données ait une extension `sqlite`. Si ce n’est pas le cas, la commande ne fonctionnera pas correctement.
|
||||
|
||||
Le processus d'import/export à l'aide d'une base de données SQLite est utile quand vous devez :
|
||||
Le processus d’import/export à l’aide d’une base de données SQLite est utile quand vous devez :
|
||||
|
||||
* exporter complètement les données d'un utilisateur,
|
||||
* exporter complètement les données d’un utilisateur,
|
||||
* sauvegarder votre service,
|
||||
* migrer votre service sur un autre serveur,
|
||||
* changer de type de base de données,
|
||||
|
|
|
@ -221,7 +221,7 @@ class FreshRSS_auth_Controller extends FreshRSS_ActionController {
|
|||
/**
|
||||
* This action gives possibility to a user to create an account.
|
||||
*
|
||||
* The user is redirected to the home if he's connected.
|
||||
* The user is redirected to the home when logged in.
|
||||
*
|
||||
* A 403 is sent if max number of registrations is reached.
|
||||
*/
|
||||
|
|
|
@ -96,7 +96,7 @@ class FreshRSS_feed_Controller extends FreshRSS_ActionController {
|
|||
|
||||
$id = $feedDAO->addFeed($values);
|
||||
if (!$id) {
|
||||
// There was an error in database... we cannot say what here.
|
||||
// There was an error in database… we cannot say what here.
|
||||
throw new FreshRSS_FeedNotAdded_Exception($url);
|
||||
}
|
||||
$feed->_id($id);
|
||||
|
@ -196,7 +196,7 @@ class FreshRSS_feed_Controller extends FreshRSS_ActionController {
|
|||
Minz_Log::warning($e->getMessage());
|
||||
return Minz_Request::bad(_t('feedback.sub.feed.internal_problem', _url('index', 'logs')), $url_redirect);
|
||||
} catch (Minz_FileNotExistException $e) {
|
||||
// Cache directory doesn't exist!
|
||||
// Cache directory doesn’t exist!
|
||||
Minz_Log::error($e->getMessage());
|
||||
return Minz_Request::bad(_t('feedback.sub.feed.internal_problem', _url('index', 'logs')), $url_redirect);
|
||||
} catch (FreshRSS_AlreadySubscribed_Exception $e) {
|
||||
|
|
|
@ -185,8 +185,8 @@ class FreshRSS_importExport_Controller extends FreshRSS_ActionController {
|
|||
/**
|
||||
* This method tries to guess the file type based on its name.
|
||||
*
|
||||
* Itis a *very* basic guess file type function. Only based on filename.
|
||||
* That's could be improved but should be enough for what we have to do.
|
||||
* It is a *very* basic guess file type function. Only based on filename.
|
||||
* That could be improved but should be enough for what we have to do.
|
||||
*/
|
||||
private static function guessFileType($filename) {
|
||||
if (substr_compare($filename, '.zip', -4) === 0) {
|
||||
|
@ -594,7 +594,7 @@ class FreshRSS_importExport_Controller extends FreshRSS_ActionController {
|
|||
foreach ($export_feeds as $feed_id) {
|
||||
$result = $export_service->generateFeedEntries($feed_id, $max_number_entries);
|
||||
if (!$result) {
|
||||
// It means the actual feed_id doesn't correspond to any existing feed
|
||||
// It means the actual feed_id doesn’t correspond to any existing feed
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -604,7 +604,7 @@ class FreshRSS_importExport_Controller extends FreshRSS_ActionController {
|
|||
|
||||
$nb_files = count($exported_files);
|
||||
if ($nb_files <= 0) {
|
||||
// There's nothing to do, there're no files to export
|
||||
// There’s nothing to do, there’re no files to export
|
||||
return Minz_Request::forward(
|
||||
array('c' => 'importExport', 'a' => 'index'),
|
||||
true
|
||||
|
@ -616,7 +616,7 @@ class FreshRSS_importExport_Controller extends FreshRSS_ActionController {
|
|||
$filename = key($exported_files);
|
||||
$content = $exported_files[$filename];
|
||||
} else {
|
||||
// More files? Let's compress them in a Zip archive
|
||||
// More files? Let’s compress them in a Zip archive
|
||||
if (!extension_loaded('zip')) {
|
||||
// Oops, there is no ZIP extension!
|
||||
return Minz_Request::bad(
|
||||
|
|
|
@ -137,7 +137,7 @@ class FreshRSS_update_Controller extends FreshRSS_ActionController {
|
|||
$this->view->_path('update/index.phtml');
|
||||
|
||||
if (file_exists(UPDATE_FILENAME)) {
|
||||
// There is already an update file to apply: we don't need to check
|
||||
// There is already an update file to apply: we don’t need to check
|
||||
// the webserver!
|
||||
// Or if already check during the last hour, do nothing.
|
||||
Minz_Request::forward(array('c' => 'update'), true);
|
||||
|
|
|
@ -351,8 +351,8 @@ class FreshRSS_user_Controller extends FreshRSS_ActionController {
|
|||
$_POST['new_user_passwordPlain'] = '';
|
||||
invalidateHttpCache();
|
||||
|
||||
// If the user has admin access, it means he's already logged in
|
||||
// and we don't want to login with the new account. Otherwise, the
|
||||
// If the user has admin access, it means he’s already logged in
|
||||
// and we don’t want to login with the new account. Otherwise, the
|
||||
// user just created its account himself so he probably wants to
|
||||
// get started immediately.
|
||||
if ($ok && !FreshRSS_Auth::hasAccess('admin')) {
|
||||
|
@ -407,12 +407,12 @@ class FreshRSS_user_Controller extends FreshRSS_ActionController {
|
|||
*
|
||||
* This route works with GET requests since the URL is provided by email.
|
||||
* The security risks (e.g. forged URL by an attacker) are not very high so
|
||||
* it's ok.
|
||||
* it’s ok.
|
||||
*
|
||||
* It returns 404 error if `force_email_validation` is disabled or if the
|
||||
* user doesn't exist.
|
||||
* user doesn’t exist.
|
||||
*
|
||||
* It returns 403 if user isn't logged in and `username` param isn't passed.
|
||||
* It returns 403 if user isn’t logged in and `username` param isn’t passed.
|
||||
*/
|
||||
public function validateEmailAction() {
|
||||
if (!FreshRSS_Context::$system_conf->force_email_validation) {
|
||||
|
@ -470,7 +470,7 @@ class FreshRSS_user_Controller extends FreshRSS_ActionController {
|
|||
/**
|
||||
* This action resends a validation email to the current user.
|
||||
*
|
||||
* It only acts on POST requests but doesn't require any param (except the
|
||||
* It only acts on POST requests but doesn’t require any param (except the
|
||||
* CSRF token).
|
||||
*
|
||||
* It returns 403 error if the user is not logged in or 404 if request is
|
||||
|
@ -537,7 +537,7 @@ class FreshRSS_user_Controller extends FreshRSS_ActionController {
|
|||
if (Minz_Request::isPost()) {
|
||||
$ok = true;
|
||||
if ($self_deletion) {
|
||||
// We check the password if it's a self-destruction
|
||||
// We check the password if it’s a self-destruction
|
||||
$nonce = Minz_Session::param('nonce');
|
||||
$challenge = Minz_Request::param('challenge', '');
|
||||
|
||||
|
|
|
@ -4,8 +4,7 @@ class FreshRSS extends Minz_FrontController {
|
|||
/**
|
||||
* Initialize the different FreshRSS / Minz components.
|
||||
*
|
||||
* PLEASE DON'T CHANGE THE ORDER OF INITIALIZATIONS UNLESS YOU KNOW WHAT
|
||||
* YOU DO!!
|
||||
* PLEASE DON’T CHANGE THE ORDER OF INITIALIZATIONS UNLESS YOU KNOW WHAT YOU DO!!
|
||||
*
|
||||
* Here is the list of components:
|
||||
* - Create a configuration setter and register it to system conf
|
||||
|
@ -37,7 +36,7 @@ class FreshRSS extends Minz_FrontController {
|
|||
Minz_ExtensionManager::init();
|
||||
|
||||
// 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.
|
||||
self::initAuth();
|
||||
if (FreshRSS_Context::$user_conf == null) {
|
||||
FreshRSS_Context::initUser();
|
||||
|
|
|
@ -190,7 +190,7 @@ class FreshRSS_Auth {
|
|||
break;
|
||||
case 'http_auth':
|
||||
case 'none':
|
||||
// Nothing to do...
|
||||
// Nothing to do…
|
||||
break;
|
||||
default:
|
||||
// TODO: extensions
|
||||
|
|
|
@ -490,18 +490,18 @@ class FreshRSS_Entry extends Minz_Model {
|
|||
|
||||
public function loadCompleteContent($force = false) {
|
||||
// Gestion du contenu
|
||||
// On cherche à récupérer les articles en entier... même si le flux ne le propose pas
|
||||
// Trying to fetch full article content even when feeds do not propose it
|
||||
$feed = $this->feed(true);
|
||||
if ($feed != null && trim($feed->pathEntries()) != '') {
|
||||
$entryDAO = FreshRSS_Factory::createEntryDao();
|
||||
$entry = $force ? null : $entryDAO->searchByGuid($this->feedId, $this->guid);
|
||||
|
||||
if ($entry) {
|
||||
// l'article existe déjà en BDD, en se contente de recharger ce contenu
|
||||
// l’article existe déjà en BDD, en se contente de recharger ce contenu
|
||||
$this->content = $entry->content();
|
||||
} else {
|
||||
try {
|
||||
// l'article n'est pas en BDD, on va le chercher sur le site
|
||||
// l’article n’est pas en BDD, on va le chercher sur le site
|
||||
$fullContent = self::getContentByParsing(
|
||||
htmlspecialchars_decode($this->link(), ENT_QUOTES),
|
||||
$feed->pathEntries(),
|
||||
|
@ -526,7 +526,7 @@ class FreshRSS_Entry extends Minz_Model {
|
|||
return true;
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
// rien à faire, on garde l'ancien contenu(requête a échoué)
|
||||
// rien à faire, on garde l’ancien contenu(requête a échoué)
|
||||
Minz_Log::warning($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -300,7 +300,7 @@ class FreshRSS_Feed extends Minz_Model {
|
|||
$this->hubUrl = isset($links[0]) ? $links[0] : null;
|
||||
|
||||
if ($loadDetails) {
|
||||
// si on a utilisé l'auto-discover, notre url va avoir changé
|
||||
// si on a utilisé l’auto-discover, notre url va avoir changé
|
||||
$subscribe_url = $simplePie->subscribe_url(false);
|
||||
|
||||
//HTML to HTML-PRE //ENT_COMPAT except '&'
|
||||
|
|
|
@ -88,7 +88,7 @@ class FreshRSS_FeedDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
|
|||
// TODO: not sure if we should write this method in DAO since DAO
|
||||
// should not be aware about feed class
|
||||
|
||||
// Add feed only if we don't find it in DB
|
||||
// Add feed only if we don’t find it in DB
|
||||
$feed_search = $this->searchByUrl($feed->url());
|
||||
if (!$feed_search) {
|
||||
$values = array(
|
||||
|
|
|
@ -157,7 +157,7 @@ class FreshRSS_Share {
|
|||
}
|
||||
|
||||
/**
|
||||
* Return the current field of the share option. It's null for shares
|
||||
* Return the current field of the share option. It’s null for shares
|
||||
* using the GET method.
|
||||
*/
|
||||
public function field() {
|
||||
|
|
|
@ -15,11 +15,11 @@ class FreshRSS_TagDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
|
|||
try {
|
||||
require(APP_PATH . '/SQL/install.sql.' . $this->pdo->dbType() . '.php');
|
||||
|
||||
Minz_Log::warning('SQL ALTER GUID case sensitivity...');
|
||||
Minz_Log::warning('SQL ALTER GUID case sensitivity…');
|
||||
$databaseDAO = FreshRSS_Factory::createDatabaseDAO();
|
||||
$databaseDAO->ensureCaseInsensitiveGuids();
|
||||
|
||||
Minz_Log::warning('SQL CREATE TABLE tag...');
|
||||
Minz_Log::warning('SQL CREATE TABLE tag…');
|
||||
$ok = $this->pdo->exec($GLOBALS['SQL_CREATE_TABLE_TAGS']) !== false;
|
||||
} catch (Exception $e) {
|
||||
Minz_Log::error('FreshRSS_EntryDAO::createTagTable error: ' . $e->getMessage());
|
||||
|
|
|
@ -61,7 +61,7 @@ class FreshRSS_Export_Service {
|
|||
/**
|
||||
* Generate the starred and labelled entries file content.
|
||||
*
|
||||
* Both starred and labelled entries are put into a "starred" file, that's
|
||||
* Both starred and labelled entries are put into a "starred" file, that’s
|
||||
* why there is only one method for both.
|
||||
*
|
||||
* @param string $type must be one of:
|
||||
|
@ -100,7 +100,7 @@ class FreshRSS_Export_Service {
|
|||
* @param integer $max_number_entries
|
||||
*
|
||||
* @return array|null First item is the filename, second item is the content.
|
||||
* It also can return null if the feed doesn't exist.
|
||||
* It also can return null if the feed doesn’t exist.
|
||||
*/
|
||||
public function generateFeedEntries($feed_id, $max_number_entries) {
|
||||
$feed = $this->feed_dao->searchById($feed_id);
|
||||
|
|
|
@ -78,7 +78,7 @@ foreach ($users as $user) {
|
|||
Minz_ExtensionManager::callHook('freshrss_user_maintenance');
|
||||
|
||||
$app->init();
|
||||
notice('FreshRSS actualize ' . $user . '...');
|
||||
notice('FreshRSS actualize ' . $user . '…');
|
||||
echo $user, ' '; //Buffered
|
||||
$app->run();
|
||||
|
||||
|
|
|
@ -107,7 +107,7 @@ return array(
|
|||
'http_error' => 'Failed to load website content.', // TODO
|
||||
'no_entries' => 'There are no articles in this feed. You need at least one article to create a preview.', // TODO
|
||||
'no_feed' => 'Internal error (feed cannot be found).', // TODO
|
||||
'no_result' => 'The selector didn\'t match anything. As a fallback the original feed text will be displayed instead.', // TODO
|
||||
'no_result' => 'The selector didn’t match anything. As a fallback the original feed text will be displayed instead.', // TODO
|
||||
'selector_empty' => 'The selector is empty. You need to define one to create a preview.', // TODO
|
||||
),
|
||||
'updated' => 'Kanál byl aktualizován',
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
return array(
|
||||
'auth' => array(
|
||||
'allow_anonymous' => 'Allow anonymous reading of the default user\'s articles (%s)', // IGNORE
|
||||
'allow_anonymous' => 'Allow anonymous reading of the default user’s articles (%s)', // IGNORE
|
||||
'allow_anonymous_refresh' => 'Allow anonymous refresh of the articles', // IGNORE
|
||||
'api_enabled' => 'Allow <abbr>API</abbr> access <small>(required for mobile apps)</small>', // IGNORE
|
||||
'form' => 'Web form (traditional, requires JavaScript)', // IGNORE
|
||||
|
|
|
@ -14,7 +14,7 @@ return array(
|
|||
'archiving' => array(
|
||||
'_' => 'Archiving', // IGNORE
|
||||
'exception' => 'Purge exception', // IGNORE
|
||||
'help' => 'More options are available in the individual feed\'s settings', // IGNORE
|
||||
'help' => 'More options are available in the individual feed’s settings', // IGNORE
|
||||
'keep_favourites' => 'Never delete favorites',
|
||||
'keep_labels' => 'Never delete labels', // IGNORE
|
||||
'keep_max' => 'Maximum number of articles to keep', // IGNORE
|
||||
|
|
|
@ -107,7 +107,7 @@ return array(
|
|||
'http_error' => 'Failed to load website content.', // IGNORE
|
||||
'no_entries' => 'There are no articles in this feed. You need at least one article to create a preview.', // IGNORE
|
||||
'no_feed' => 'Internal error (feed cannot be found).', // IGNORE
|
||||
'no_result' => 'The selector didn\'t match anything. As a fallback the original feed text will be displayed instead.', // IGNORE
|
||||
'no_result' => 'The selector didn’t match anything. As a fallback the original feed text will be displayed instead.', // IGNORE
|
||||
'selector_empty' => 'The selector is empty. You need to define one to create a preview.', // IGNORE
|
||||
),
|
||||
'updated' => 'Feed has been updated', // IGNORE
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
return array(
|
||||
'auth' => array(
|
||||
'allow_anonymous' => 'Allow anonymous reading of the default user\'s articles (%s)',
|
||||
'allow_anonymous' => 'Allow anonymous reading of the default user’s articles (%s)',
|
||||
'allow_anonymous_refresh' => 'Allow anonymous refresh of the articles',
|
||||
'api_enabled' => 'Allow <abbr>API</abbr> access <small>(required for mobile apps)</small>',
|
||||
'form' => 'Web form (traditional, requires JavaScript)',
|
||||
|
|
|
@ -14,7 +14,7 @@ return array(
|
|||
'archiving' => array(
|
||||
'_' => 'Archiving',
|
||||
'exception' => 'Purge exception',
|
||||
'help' => 'More options are available in the individual feed\'s settings',
|
||||
'help' => 'More options are available in the individual feed’s settings',
|
||||
'keep_favourites' => 'Never delete favourites',
|
||||
'keep_labels' => 'Never delete labels',
|
||||
'keep_max' => 'Maximum number of articles to keep',
|
||||
|
|
|
@ -107,7 +107,7 @@ return array(
|
|||
'http_error' => 'Failed to load website content.',
|
||||
'no_entries' => 'There are no articles in this feed. You need at least one article to create a preview.',
|
||||
'no_feed' => 'Internal error (feed cannot be found).',
|
||||
'no_result' => 'The selector didn\'t match anything. As a fallback the original feed text will be displayed instead.',
|
||||
'no_result' => 'The selector didn’t match anything. As a fallback the original feed text will be displayed instead.',
|
||||
'selector_empty' => 'The selector is empty. You need to define one to create a preview.',
|
||||
),
|
||||
'updated' => 'Feed has been updated',
|
||||
|
|
|
@ -123,7 +123,7 @@ return array(
|
|||
),
|
||||
'js' => array(
|
||||
'category_empty' => 'Vaciar categoría',
|
||||
'confirm_action' => '¿Seguyro que quieres hacerlo? No hay marcha atrás...',
|
||||
'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.',
|
||||
|
|
|
@ -100,14 +100,14 @@ return array(
|
|||
'n_entries_deleted' => '%d articles ont été supprimés.',
|
||||
'no_refresh' => 'Il n’y a aucun flux à actualiser…',
|
||||
'not_added' => '<em>%s</em> n’a pas pu être ajouté.',
|
||||
'not_found' => 'Le flux n\'a pas pu être trouvé.',
|
||||
'not_found' => 'Le flux n’a pas pu être trouvé.',
|
||||
'over_max' => 'Vous avez atteint votre limite de flux (%d)',
|
||||
'reloaded' => '<em>%s</em> a été rechargé.',
|
||||
'selector_preview' => array(
|
||||
'http_error' => 'Échec lors du chargement du contenu du site web.',
|
||||
'no_entries' => 'Il n\'y a pas d\'articles dans ce flux. Vous devez avoir au moins un article pour générer une prévisualisation.',
|
||||
'no_feed' => 'Erreur interne (le flux n\'a pas pu être trouvé).',
|
||||
'no_result' => 'Le sélecteur n\'a produit aucune concordance. Dans ces circonstances, le texte original du flux sera affiché.',
|
||||
'no_entries' => 'Il n’y a pas d’articles dans ce flux. Vous devez avoir au moins un article pour générer une prévisualisation.',
|
||||
'no_feed' => 'Erreur interne (le flux n’a pas pu être trouvé).',
|
||||
'no_result' => 'Le sélecteur n’a produit aucune concordance. Dans ces circonstances, le texte original du flux sera affiché.',
|
||||
'selector_empty' => 'Le sélecteur est vide. Vous devez en définir un pour générer une prévisualisation.',
|
||||
),
|
||||
'updated' => 'Le flux a été mis à jour',
|
||||
|
|
|
@ -107,7 +107,7 @@ return array(
|
|||
'http_error' => 'Failed to load website content.', // TODO
|
||||
'no_entries' => 'There are no articles in this feed. You need at least one article to create a preview.', // TODO
|
||||
'no_feed' => 'Internal error (feed cannot be found).', // TODO
|
||||
'no_result' => 'The selector didn\'t match anything. As a fallback the original feed text will be displayed instead.', // TODO
|
||||
'no_result' => 'The selector didn’t match anything. As a fallback the original feed text will be displayed instead.', // TODO
|
||||
'selector_empty' => 'The selector is empty. You need to define one to create a preview.', // TODO
|
||||
),
|
||||
'updated' => 'ההזנה התעדכנה',
|
||||
|
|
|
@ -107,7 +107,7 @@ return array(
|
|||
'http_error' => 'Failed to load website content.', // TODO
|
||||
'no_entries' => 'There are no articles in this feed. You need at least one article to create a preview.', // TODO
|
||||
'no_feed' => 'Internal error (feed cannot be found).', // TODO
|
||||
'no_result' => 'The selector didn\'t match anything. As a fallback the original feed text will be displayed instead.', // TODO
|
||||
'no_result' => 'The selector didn’t match anything. As a fallback the original feed text will be displayed instead.', // TODO
|
||||
'selector_empty' => 'The selector is empty. You need to define one to create a preview.', // TODO
|
||||
),
|
||||
'updated' => 'Feed aggiornato',
|
||||
|
|
|
@ -80,7 +80,7 @@ return array(
|
|||
'title' => 'Profiel',
|
||||
),
|
||||
'query' => array(
|
||||
'_' => 'Gebruikersquery\'s (informatie aanvragen)',
|
||||
'_' => 'Gebruikersquery’s (informatie aanvragen)',
|
||||
'deprecated' => 'Deze query (informatie aanvraag) is niet langer geldig. De bedoelde categorie of feed is al verwijderd.',
|
||||
'filter' => array(
|
||||
'_' => 'Filter toegepast:',
|
||||
|
@ -118,7 +118,7 @@ return array(
|
|||
'state_13' => 'Toon gelezen artikelen',
|
||||
'state_14' => 'Toon ongelezen artikelen',
|
||||
'state_15' => 'Toon alle artikelen',
|
||||
'title' => 'Gebruikersquery\'s',
|
||||
'title' => 'Gebruikersquery’s',
|
||||
),
|
||||
'reading' => array(
|
||||
'_' => 'Lezen',
|
||||
|
|
|
@ -56,11 +56,11 @@ return array(
|
|||
'removed' => '%s suprimida',
|
||||
),
|
||||
'import_export' => array(
|
||||
'export_no_zip_extension' => 'L\'extension ZIP es pas presenta sul servidor. Volgatz ensajar d\'exportar los fichièrs un per un.',
|
||||
'export_no_zip_extension' => 'L’extension ZIP es pas presenta sul servidor. Volgatz ensajar d’exportar los fichièrs un per un.',
|
||||
'feeds_imported' => 'Vòstres fluxes son estats importats seràn actualizats en seguida',
|
||||
'feeds_imported_with_errors' => 'Vòstres fluxes son estats importats mas i a agut d’errors',
|
||||
'file_cannot_be_uploaded' => 'Telecargament del fichièr impossible',
|
||||
'no_zip_extension' => 'L\'extension es pas presenta sul servidor.',
|
||||
'no_zip_extension' => 'L’extension es pas presenta sul servidor.',
|
||||
'zip_error' => 'Una error s’es producha pendent l’importacion del fichièr ZIP.',
|
||||
),
|
||||
'profile' => array(
|
||||
|
@ -95,7 +95,7 @@ return array(
|
|||
'deleted' => 'Lo flux es suprimit',
|
||||
'error' => 'Error en actualizar',
|
||||
'internal_problem' => 'Lo flux pòt pas èsser ajustat. <a href="%s">Consultatz los jornals d’audit de FreshRSS</a> per ne saber mai. Podètz forçar l’apondon en ajustant <code>#force_feed</code> a l’URL.',
|
||||
'invalid_url' => 'L\'URL <em>%s</em> es invalida',
|
||||
'invalid_url' => 'L’URL <em>%s</em> es invalida',
|
||||
'n_actualized' => '%s fluxes son estats actualizats',
|
||||
'n_entries_deleted' => '%d articles son estats suprimits',
|
||||
'no_refresh' => 'I a pas cap de flux d’actualizar…',
|
||||
|
|
|
@ -16,7 +16,7 @@ return array(
|
|||
'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>', // IGNORE
|
||||
'bugs_reports' => 'Zgłaszanie problemów',
|
||||
'credits' => 'Uznanie autorstwa',
|
||||
'credits_content' => 'Niektóre elementy designu pochodzą z <a href="http://twitter.github.io/bootstrap/">Bootstrapa</a>, przy czym FreshRSS nie używa tego frameworku. <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">Ikony</a> zostały pierwotnie stworzone dla <a href="https://www.gnome.org/">projektu GNOME</a>. Font <em>Open Sans</em> jest autorstwa <a href="https://fonts.google.com/specimen/Open+Sans">Steve\'a Mattesona</a>. FreshRSS opiera się na <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, frameworku PHP.',
|
||||
'credits_content' => 'Niektóre elementy designu pochodzą z <a href="http://twitter.github.io/bootstrap/">Bootstrapa</a>, przy czym FreshRSS nie używa tego frameworku. <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">Ikony</a> zostały pierwotnie stworzone dla <a href="https://www.gnome.org/">projektu GNOME</a>. Font <em>Open Sans</em> jest autorstwa <a href="https://fonts.google.com/specimen/Open+Sans">Steve’a Mattesona</a>. FreshRSS opiera się na <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, frameworku PHP.',
|
||||
'freshrss_description' => 'FreshRSS jest agregatorem kanałów RSS przeznaczonym do zainstalowania na własnym serwerze, podobnie jak <a href="http://tontof.net/kriss/feed/">Kriss Feed</a>, bądź <a href="https://github.com/LeedRSS/Leed">Leed</a>. Jest lekki i łatwy do schowania w kieszeni, pozostając przy tym potężnym i konfigurowalnym narzędziem.',
|
||||
'github' => '<a href="https://github.com/FreshRSS/FreshRSS/issues">na Githubie</a>',
|
||||
'license' => 'Licencja',
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
return array(
|
||||
'api' => array(
|
||||
'documentation' => 'URL\'yi harici bir araçla kullanmak için kopyala.',
|
||||
'documentation' => 'URL’yi harici bir araçla kullanmak için kopyala.',
|
||||
'title' => 'API', // IGNORE
|
||||
),
|
||||
'bookmarklet' => array(
|
||||
|
|
|
@ -284,7 +284,7 @@ function freshrss_already_installed() {
|
|||
return false;
|
||||
}
|
||||
|
||||
// ok, the global conf exists... but what about default user conf?
|
||||
// ok, the global conf exists… but what about default user conf?
|
||||
$current_user = $system_conf->default_user;
|
||||
try {
|
||||
Minz_Configuration::register('user', join_path(USERS_PATH, $current_user, 'config.php'));
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This is a configuration file. You shouldn't modify it unless you know what
|
||||
* 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.
|
||||
*
|
||||
|
@ -16,7 +16,7 @@
|
|||
* for internal use)
|
||||
* - transform is an array of transformation to apply on links and titles
|
||||
* - help is a URL to a help page (mandatory for form = 'advanced')
|
||||
* - form is the type of form to display during configuration. It's either
|
||||
* - form is the type of form to display during configuration. It’s either
|
||||
* 'simple' or 'advanced'. 'simple' is used when only the name is configurable,
|
||||
* 'advanced' is used when the name and the location are configurable.
|
||||
* - method is the HTTP method (POST or GET) used to share a link.
|
||||
|
|
|
@ -95,7 +95,7 @@ class I18nData {
|
|||
}
|
||||
|
||||
/**
|
||||
* Add a new language. It's a copy of the reference language.
|
||||
* Add a new language. It’s a copy of the reference language.
|
||||
*
|
||||
* @param string $language
|
||||
* @param string $reference
|
||||
|
|
|
@ -20,7 +20,7 @@ if [ -z "$(command -v po4a)" ]; then
|
|||
fi
|
||||
|
||||
# Generate po4a.conf file with list of TLDR pages
|
||||
echo 'Generating configuration file for po4a...'
|
||||
echo 'Generating configuration file for po4a…'
|
||||
{
|
||||
echo '# WARNING: this file is generated with translation-update.sh'
|
||||
echo '# DO NOT modify this file manually!'
|
||||
|
@ -34,5 +34,5 @@ for FILE in $(cd en && tree -f -i | grep ".md" | grep -v "admins"); do
|
|||
done
|
||||
|
||||
# Generate POT file, PO files, and pages.XX pages
|
||||
echo 'Generating POT file and translated pages...'
|
||||
echo 'Generating POT file and translated pages…'
|
||||
po4a -k 0 --msgid-bugs-address 'https://github.com/FreshRSS/FreshRSS/issues' $CONFIGFILE
|
||||
|
|
|
@ -35,7 +35,7 @@ return array(
|
|||
|
||||
# Force users to validate their email address. If `true`, an email with a
|
||||
# validation URL is sent during registration, and users cannot access their
|
||||
# feed if they didn't access this URL.
|
||||
# feed if they didn’t access this URL.
|
||||
# Note: it is recommended to not enable it with PHP < 5.5 (emails cannot be
|
||||
# sent).
|
||||
'force_email_validation' => false,
|
||||
|
@ -64,7 +64,7 @@ return array(
|
|||
|
||||
# Allow or not the use of the API, used for mobile apps.
|
||||
# End-point is https://freshrss.example.net/api/greader.php
|
||||
# You need to set the user's API password.
|
||||
# You need to set the user’s API password.
|
||||
'api_enabled' => false,
|
||||
|
||||
# Allow or not the use of an unsafe login,
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
Learn how to install, update, and backup FreshRSS, as well as how to use the command line tools.
|
||||
|
||||
1. [Prerequisites](02_Prerequisites.md): What you'll need to run FreshRSS
|
||||
1. [Prerequisites](02_Prerequisites.md): What you’ll need to run FreshRSS
|
||||
2. [General installation instructions](03_Installation.md) for FreshRSS
|
||||
3. [Update your installation](04_Updating.md) to the latest stable or development version
|
||||
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
# General Installation Instructions
|
||||
|
||||
These instructions are intended as general guidelines for installing FreshRSS. You may wish to consult the [Step-by-step Tutorial for installing FreshRSS on Debian 9/Ubuntu 16.04](06_LinuxInstall.md) if you don't currently have a web server and don't have experience setting one up.
|
||||
These instructions are intended as general guidelines for installing FreshRSS. You may wish to consult the [Step-by-step Tutorial for installing FreshRSS on Debian 9/Ubuntu 16.04](06_LinuxInstall.md) if you don’t currently have a web server and don’t have experience setting one up.
|
||||
|
||||
Before you begin, make sure that you've read the [prerequisites](02_Prerequisites.md) for running FreshRSS. As shorthand, `.` refers to the directory to which your FreshRSS installation lives.
|
||||
Before you begin, make sure that you’ve read the [prerequisites](02_Prerequisites.md) for running FreshRSS. As shorthand, `.` refers to the directory to which your FreshRSS installation lives.
|
||||
|
||||
1. If the computer you're running on is not currently running a web server, you'll first need to install and configure a web server, a version of PHP, and an appropriate database, as listed in the prerequisites. Specially, if you are using NGINX, please keep in mind that FreshRSS needs some specified variables to run properly. So make sure you've checked our configuration file. [Example Apache and Nginx configuration files can be found here](10_ServerConfig.md).
|
||||
1. If the computer you’re running on is not currently running a web server, you’ll first need to install and configure a web server, a version of PHP, and an appropriate database, as listed in the prerequisites. Specially, if you are using NGINX, please keep in mind that FreshRSS needs some specified variables to run properly. So make sure you’ve checked our configuration file. [Example Apache and Nginx configuration files can be found here](10_ServerConfig.md).
|
||||
|
||||
2. Download your chosen version of FreshRSS, or fetch it via git. It's advisable that you put FreshRSS in `/usr/share/`, and symlink the `./p/` folder to the root of your web server.[^1]
|
||||
2. Download your chosen version of FreshRSS, or fetch it via git. It’s advisable that you put FreshRSS in `/usr/share/`, and symlink the `./p/` folder to the root of your web server.[^1]
|
||||
|
||||
3. Give ownership of the FreshRSS folder to your web server user (often `www-data`). Give group read permissions to all files in `.`[^2], and group write permissions to `./data/`.
|
||||
|
||||
|
@ -14,7 +14,7 @@ Before you begin, make sure that you've read the [prerequisites](02_Prerequisite
|
|||
|
||||
5. Create a database for FreshRSS to use. Note the username and password for this database, as it will be needed during installation!
|
||||
|
||||
6. Using your supported web browser of choice, navigate to the address you've installed your server to complete the installation from the GUI.[^3]
|
||||
6. Using your supported web browser of choice, navigate to the address you’ve installed your server to complete the installation from the GUI.[^3]
|
||||
|
||||
7. You can then customize [the configuration of your instance](https://github.com/FreshRSS/FreshRSS/blob/edge/config.default.php#L3-L4), [the default configuration for new users](https://github.com/FreshRSS/FreshRSS/blob/edge/config-user.default.php#L3-L5) or [the default set of feeds for new users](https://github.com/FreshRSS/FreshRSS/blob/edge/opml.default.xml#L2-L5).
|
||||
|
||||
|
@ -24,4 +24,4 @@ Before you begin, make sure that you've read the [prerequisites](02_Prerequisite
|
|||
|
||||
[^2]: If you wish to allow updates from the web interface, also give group write permissions to this folder.
|
||||
|
||||
[^3]: Assuming your server is `http://example.net`, this address could be `http://example.net/p/` if you didn't follow our previous advice about not exposing the `./p/` folder.
|
||||
[^3]: Assuming your server is `http://example.net`, this address could be `http://example.net/p/` if you didn’t follow our previous advice about not exposing the `./p/` folder.
|
||||
|
|
|
@ -15,7 +15,7 @@ You only have to do is to run the following command:
|
|||
|
||||
Alternatively, you can edit configuration files manually.
|
||||
To do so, you need to change the *default_user* value in the file *./data/config.php*.
|
||||
As the file is a PHP file, you have to make sure that it's still valid after the update by running the following command:
|
||||
As the file is a PHP file, you have to make sure that it’s still valid after the update by running the following command:
|
||||
```sh
|
||||
php -l ./data/config.php
|
||||
```
|
||||
|
|
|
@ -4,7 +4,7 @@ The following is general procedure; [specific commands for Linux may be found he
|
|||
|
||||
## Backing Up
|
||||
|
||||
Before you update to a new version of FreshRSS, it's always a good idea to backup your current installation. Simply make an archive of your FreshRSS directory, which can be restored if needed by following the "Updating from a Zip Archive" section at the bottom of this document.
|
||||
Before you update to a new version of FreshRSS, it’s always a good idea to backup your current installation. Simply make an archive of your FreshRSS directory, which can be restored if needed by following the "Updating from a Zip Archive" section at the bottom of this document.
|
||||
|
||||
## Updating From the Web
|
||||
|
||||
|
@ -18,7 +18,7 @@ If you installed FreshRSS using git, you can update, change branches, or switch
|
|||
|
||||
Generally, the update procedure via git works as follows:
|
||||
|
||||
1. Making sure you're in your FreshRSS install directory, and fetch updates.
|
||||
1. Making sure you’re in your FreshRSS install directory, and fetch updates.
|
||||
2. Checkout the branch you wish to use.
|
||||
3. Perform a hard reset to discard local changes.
|
||||
4. Delete manual additions. Be sure to move your backup out of the directory before doing this step!
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Backup
|
||||
|
||||
This tutorial demonstrates commands for backing up FreshRSS. It assumes that your main FreshRSS directory is `/usr/share/FreshRSS`; If you've installed it somewhere else, substitute your path as necessary.
|
||||
This tutorial demonstrates commands for backing up FreshRSS. It assumes that your main FreshRSS directory is `/usr/share/FreshRSS`; If you’ve installed it somewhere else, substitute your path as necessary.
|
||||
|
||||
## Installation Backup
|
||||
|
||||
|
@ -8,19 +8,19 @@ Do this before an upgrade.
|
|||
|
||||
### Creating a Backup
|
||||
|
||||
First, Enter the directory you wish to save your backup to. Here, for example, we'll save the backup to the user home directory
|
||||
First, Enter the directory you wish to save your backup to. Here, for example, we’ll save the backup to the user home directory
|
||||
|
||||
```sh
|
||||
cd ~
|
||||
```
|
||||
|
||||
Next, we'll create a gzipped tar archive of the FreshRSS directory. The following command will archive the entire contents of your FreshRSS installation in it's current state.
|
||||
Next, we’ll create a gzipped tar archive of the FreshRSS directory. The following command will archive the entire contents of your FreshRSS installation in it’s current state.
|
||||
|
||||
```sh
|
||||
tar -czf FreshRSS-backup.tgz -C /usr/share/FreshRSS/ .
|
||||
```
|
||||
|
||||
And you're done!
|
||||
And you’re done!
|
||||
|
||||
### Restoring from a Backup
|
||||
|
||||
|
@ -56,14 +56,14 @@ You can export your feed list in OPML format either from the web interface, or f
|
|||
|
||||
### Saving Articles
|
||||
|
||||
**If you are using MySQL**
|
||||
**If you are using MySQL**
|
||||
You can use [phpMyAdmin](https://www.phpmyadmin.net/) or MySQL tools, where `<db_user>` is your database username, `<db_host>` is the hostname of your web server containing your FreshRSS database, and `<freshrss_db>` is the database used by FreshRSS:
|
||||
|
||||
```sh
|
||||
mysqldump --skip-comments --disable-keys --user=<db_user> --password --host <db_host> --result-file=freshrss.dump.sql --databases <freshrss_db>
|
||||
```
|
||||
|
||||
**From any database**
|
||||
**From any database**
|
||||
You can use the [Command-Line Interface](https://github.com/FreshRSS/FreshRSS/blob/edge/cli/README.md) to export your database to a SQLite database file:
|
||||
|
||||
```sh
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
# Configuring the email address validation
|
||||
|
||||
FreshRSS can verify that users give a valid email address. It is not configured
|
||||
by default so you'll have to follow these few steps to verify email addresses.
|
||||
by default so you’ll have to follow these few steps to verify email addresses.
|
||||
|
||||
It is intended to administrators who host users and want to be sure to be able
|
||||
to contact them.
|
||||
|
||||
## Force email validation
|
||||
|
||||
In your `data/config.php` file, you'll find a `force_email_validation` item:
|
||||
In your `data/config.php` file, you’ll find a `force_email_validation` item:
|
||||
set it to `true`. An email field now appears on the registration page and
|
||||
emails are sent when users change their email.
|
||||
|
||||
|
@ -19,45 +19,45 @@ You can also enable this feature directly in FreshRSS: `Administration` >
|
|||
|
||||
By default, FreshRSS will attempt to send emails with the [`mail`](https://www.php.net/manual/en/function.mail.php)
|
||||
function of PHP. It is the simpler solution but it might not work as expected.
|
||||
For example, we don't support (yet?) sending emails from inside our official
|
||||
For example, we don’t support (yet?) sending emails from inside our official
|
||||
Docker images. We recommend to use a proper SMTP server.
|
||||
|
||||
To configure a SMTP server, you'll have to modify the `data/config.php` file.
|
||||
To configure a SMTP server, you’ll have to modify the `data/config.php` file.
|
||||
|
||||
First, change the `mailer` item to `smtp` (instead of the default `mail`).
|
||||
|
||||
Then, you should change the `smtp` options like you would do with a regular
|
||||
email client. You can find the full list of options in the [`config.default.php` file](https://github.com/FreshRSS/FreshRSS/blob/edge/config.default.php).
|
||||
If you're not sure to what each item is corresponding, you may find useful [the
|
||||
If you’re not sure to what each item is corresponding, you may find useful [the
|
||||
PHPMailer documentation](http://phpmailer.github.io/PHPMailer/classes/PHPMailer.PHPMailer.PHPMailer.html#properties)
|
||||
(which is used by FreshRSS under the hood).
|
||||
|
||||
## Check your SMTP server is correctly configured
|
||||
|
||||
To do so, once you've enabled the `force_email_validation` option, you only
|
||||
To do so, once you’ve enabled the `force_email_validation` option, you only
|
||||
need to change your email address on the profile page and check that an email
|
||||
arrives on the new address.
|
||||
|
||||
If it fails, you can change the environment (in `data/config.php` file, change
|
||||
`production` to `development`). PHPMailer will become more verbose and you'll
|
||||
be able to see what happens in the PHP logs. If something's wrong here, you'll
|
||||
`production` to `development`). PHPMailer will become more verbose and you’ll
|
||||
be able to see what happens in the PHP logs. If something’s wrong here, you’ll
|
||||
probably better served by asking to your favorite search engine than asking us.
|
||||
If you think that something's wrong in FreshRSS code, don't hesitate to open a
|
||||
If you think that something’s wrong in FreshRSS code, don’t hesitate to open a
|
||||
ticket though.
|
||||
|
||||
Also, make sure the email didn't arrive in your spam.
|
||||
Also, make sure the email didn’t arrive in your spam.
|
||||
|
||||
Once you're done, don't forget to reconfigure your environment to `production`.
|
||||
Once you’re done, don’t forget to reconfigure your environment to `production`.
|
||||
|
||||
## Access the validation URL during development
|
||||
|
||||
You might find painful to configure a SMTP server when you're developping and
|
||||
You might find painful to configure a SMTP server when you’re developping and
|
||||
`mail` function will not work on your local machine. For the moment, there is
|
||||
no easy way to access the validation URL unless forging it. You'll need to
|
||||
no easy way to access the validation URL unless forging it. You’ll need to
|
||||
information:
|
||||
|
||||
- the username of the user to validate (you should know it)
|
||||
- its validation token, that you'll find in its configuration file:
|
||||
- its validation token, that you’ll find in its configuration file:
|
||||
|
||||
```console
|
||||
$ # For instance, for a user called `alice`
|
||||
|
@ -67,4 +67,4 @@ $ grep email_validation_token data/users/alice/config.php | cut -d \' -f 4 -
|
|||
|
||||
Then, the validation URL should be `http://localhost:8080/i/?c=user&a=validateEmail&username=alice&token=3d75042a4471994a0346e18ae87602f19220a795`
|
||||
|
||||
Don't forget to adapt this URL with the correct port, username and token.
|
||||
Don’t forget to adapt this URL with the correct port, username and token.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Installation on Debian 9/Ubuntu 16.04
|
||||
|
||||
This tutorial will give you step-by-step commands to install the latest stable release of FreshRSS with Apache and MySQL using git. It's always recommended that you [backup your installation](05_Backup.md) before updating
|
||||
This tutorial will give you step-by-step commands to install the latest stable release of FreshRSS with Apache and MySQL using git. It’s always recommended that you [backup your installation](05_Backup.md) before updating
|
||||
|
||||
Please note: Commands need to be run as an administrator; either perform the following from a sudo shell (`sudo -s`) or use an administrator account.
|
||||
|
||||
|
@ -13,7 +13,7 @@ apt install apache2
|
|||
a2enmod headers expires rewrite ssl
|
||||
```
|
||||
|
||||
Then, you have to configure Apache. You can create a file in `/etc/apache2/sites-available`, based on [our example configuration file](10_ServerConfig.md). Once you're done, create a symbolic link from this file to the `sites-enabled` folder:
|
||||
Then, you have to configure Apache. You can create a file in `/etc/apache2/sites-available`, based on [our example configuration file](10_ServerConfig.md). Once you’re done, create a symbolic link from this file to the `sites-enabled` folder:
|
||||
|
||||
```sh
|
||||
ln -s /etc/apache2/sites-available/freshrss.conf /etc/apache2/sites-enabled/freshrss.conf
|
||||
|
@ -31,7 +31,7 @@ Install the PHP module for Apache
|
|||
apt install libapache2-mod-php
|
||||
```
|
||||
|
||||
Next, we'll need to install and configure MySQL. Install MySQL components like so:
|
||||
Next, we’ll need to install and configure MySQL. Install MySQL components like so:
|
||||
|
||||
```sh
|
||||
sudo apt install mysql-server mysql-client php-mysql
|
||||
|
@ -43,8 +43,8 @@ MySQL must now be started:
|
|||
service mysql-server start
|
||||
```
|
||||
|
||||
We'll need to configure MySQL.
|
||||
**Note:** As you've just installed mysql, there will be no root password; simply hit enter on the first step
|
||||
We’ll need to configure MySQL.
|
||||
**Note:** As you’ve just installed mysql, there will be no root password; simply hit enter on the first step
|
||||
|
||||
```sh
|
||||
mysql_secure_installation
|
||||
|
@ -64,7 +64,7 @@ service apache2 restart
|
|||
|
||||
## Part 2: Installing FreshRSS
|
||||
|
||||
Begin by installing git, if you don't already have it installed.
|
||||
Begin by installing git, if you don’t already have it installed.
|
||||
|
||||
```sh
|
||||
apt install git
|
||||
|
@ -85,7 +85,7 @@ chown -R :www-data .
|
|||
sudo chmod -R g+r .
|
||||
```
|
||||
|
||||
We'll also need to allow the data folder to be written to, like so:
|
||||
We’ll also need to allow the data folder to be written to, like so:
|
||||
|
||||
```sh
|
||||
chmod -R g+w ./data/
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# Updating on Linux
|
||||
|
||||
This tutorial demonstrates commands for updating FreshRSS. It assumes that your main FreshRSS directory is `/usr/share/FreshRSS`; If you've installed it somewhere else, substitute your path as necessary.
|
||||
This tutorial demonstrates commands for updating FreshRSS. It assumes that your main FreshRSS directory is `/usr/share/FreshRSS`; If you’ve installed it somewhere else, substitute your path as necessary.
|
||||
|
||||
**Note that FreshRSS contains a built-in update system.** It's easier to use if you don't understand the commands that follow. It's available through the web interface of your FreshRSS installation, Administration → Update.
|
||||
**Note that FreshRSS contains a built-in update system.** It’s easier to use if you don’t understand the commands that follow. It’s available through the web interface of your FreshRSS installation, Administration → Update.
|
||||
|
||||
## Pausing automatic feed updates
|
||||
|
||||
|
@ -24,7 +24,7 @@ You may wish to run the cron task or systemd unit (`freshrss.service`) immediate
|
|||
|
||||
**You must have used git to install FreshRSS to use this update method.**
|
||||
|
||||
If your local user doesn't have write access to the FreshRSS folder, use a sudo shell (`sudo -s`), prefix the following commands with `sudo`, or switch to an account that does have write access to the folder.
|
||||
If your local user doesn’t have write access to the FreshRSS folder, use a sudo shell (`sudo -s`), prefix the following commands with `sudo`, or switch to an account that does have write access to the folder.
|
||||
|
||||
1. Change to your FreshRSS directory
|
||||
```sh
|
||||
|
@ -42,7 +42,7 @@ If your local user doesn't have write access to the FreshRSS folder, use a sudo
|
|||
git clean -f -d
|
||||
```
|
||||
|
||||
Note: If you wish to keep your changes, it's better to [create a pull request](https://github.com/FreshRSS/FreshRSS/compare) or [an extension](../developers/03_Backend/05_Extensions.md).
|
||||
Note: If you wish to keep your changes, it’s better to [create a pull request](https://github.com/FreshRSS/FreshRSS/compare) or [an extension](../developers/03_Backend/05_Extensions.md).
|
||||
|
||||
4. Update FreshRSS
|
||||
```sh
|
||||
|
@ -58,7 +58,7 @@ If your local user doesn't have write access to the FreshRSS folder, use a sudo
|
|||
git status
|
||||
```
|
||||
|
||||
The command should tell you the tag that you're using. It must be the same as the one associated with [the latest release on GitHub](https://github.com/FreshRSS/FreshRSS/releases/latest). If you use the rolling release, it should tell you that your `edge` branch is up to date with `origin`.
|
||||
The command should tell you the tag that you’re using. It must be the same as the one associated with [the latest release on GitHub](https://github.com/FreshRSS/FreshRSS/releases/latest). If you use the rolling release, it should tell you that your `edge` branch is up to date with `origin`.
|
||||
|
||||
6. Re-set correct permissions so that your web server can access the files
|
||||
```sh
|
||||
|
@ -67,7 +67,7 @@ If your local user doesn't have write access to the FreshRSS folder, use a sudo
|
|||
|
||||
## Using the Zip archive
|
||||
|
||||
If your local user doesn't have write access to the FreshRSS folder, use a sudo shell (`sudo -s`), prefix the following commands with `sudo`, or switch to an account that does have write access to the folder.
|
||||
If your local user doesn’t have write access to the FreshRSS folder, use a sudo shell (`sudo -s`), prefix the following commands with `sudo`, or switch to an account that does have write access to the folder.
|
||||
|
||||
1. Change to your FreshRSS directory
|
||||
```sh
|
||||
|
|
|
@ -2,17 +2,17 @@
|
|||
|
||||
FreshRSS is updated by the `./app/actualize_script.php` script. Knowing this, we can periodically trigger it to ensure up-to-date feeds.
|
||||
|
||||
**Note:** the update script won't update any particular feed more often than once every twenty minutes, so it doesn't make sense to trigger it much more frequently than that.
|
||||
**Note:** the update script won’t update any particular feed more often than once every twenty minutes, so it doesn’t make sense to trigger it much more frequently than that.
|
||||
|
||||
**Note:** the following examples assume that FreshRSS is installed to `/usr/share/FreshRSS`. You'll need to modify the FreshRSS path to reflect your own system.
|
||||
**Note:** the following examples assume that FreshRSS is installed to `/usr/share/FreshRSS`. You’ll need to modify the FreshRSS path to reflect your own system.
|
||||
|
||||
**Note:** If you cannot configure a local Cronjob, [see an alternative using online cron](../users/03_Main_view.md#online-cron).
|
||||
|
||||
## Cron as a trigger
|
||||
|
||||
You'll need to check the Cron documentation for your specific distribution ([Debian/Ubuntu](https://help.ubuntu.com/community/CronHowto), [Red Hat/Fedora/CentOS](https://fedoraproject.org/wiki/Administration_Guide_Draft/Cron), [Slackware](https://docs.slackware.com/fr:slackbook:process_control?#cron), [Gentoo](https://wiki.gentoo.org/wiki/Cron), [Arch Linux](https://wiki.archlinux.org/index.php/Cron) ...) to make sure you set the Cron job correctly.
|
||||
You’ll need to check the Cron documentation for your specific distribution ([Debian/Ubuntu](https://help.ubuntu.com/community/CronHowto), [Red Hat/Fedora/CentOS](https://fedoraproject.org/wiki/Administration_Guide_Draft/Cron), [Slackware](https://docs.slackware.com/fr:slackbook:process_control?#cron), [Gentoo](https://wiki.gentoo.org/wiki/Cron), [Arch Linux](https://wiki.archlinux.org/index.php/Cron) …) to make sure you set the Cron job correctly.
|
||||
|
||||
It's advisable that you run the Cron job as your Web server user (often `www-data`).
|
||||
It’s advisable that you run the Cron job as your Web server user (often `www-data`).
|
||||
|
||||
### Example on Debian/Ubuntu
|
||||
|
||||
|
@ -25,7 +25,7 @@ Edit `/etc/crontab` and append the following line:
|
|||
|
||||
## Systemd as a trigger
|
||||
|
||||
Some systems can't use a Cron job, but they can use systemd. It's easy to configure it to mimic Cron's features.
|
||||
Some systems can’t use a Cron job, but they can use systemd. It’s easy to configure it to mimic Cron’s features.
|
||||
|
||||
First you need to add a `freshrss.timer` file in `/etc/systemd/system/` with the following content:
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ The default user is used for the anonymous reading.
|
|||
|
||||
How to enable the anonymous reading mode:
|
||||
* go to settings `Administration` → `Authentication`
|
||||
* enable the checkbox of `Allow anonymous reading of the default user's articles`
|
||||
* enable the checkbox of `Allow anonymous reading of the default user’s articles`
|
||||
* when no user is logged in then the feeds of the default user is shown
|
||||
|
||||
## Change the default user
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
## Report a bug
|
||||
|
||||
Have you found a bug? Don't panic, here are some steps to report it with ease:
|
||||
Have you found a bug? Don’t panic, here are some steps to report it with ease:
|
||||
|
||||
1. Search for it on [the bug tracker](https://github.com/FreshRSS/FreshRSS/issues) (don't forget to use the search bar).
|
||||
2. If you find a similar bug, don't hesitate to post a comment to add more importance to the related ticket.
|
||||
3. If you didn't find it, [open a new ticket](https://github.com/FreshRSS/FreshRSS/issues/new).
|
||||
1. Search for it on [the bug tracker](https://github.com/FreshRSS/FreshRSS/issues) (don’t forget to use the search bar).
|
||||
2. If you find a similar bug, don’t hesitate to post a comment to add more importance to the related ticket.
|
||||
3. If you didn’t find it, [open a new ticket](https://github.com/FreshRSS/FreshRSS/issues/new).
|
||||
|
||||
If you have to create a new ticket, please try to keep in mind the following advice:
|
||||
|
||||
|
@ -24,20 +24,20 @@ For a more detailed guide on writing bug reports, please refer to [the in-depth
|
|||
|
||||
Would you like to fix a bug? For optimum coordination between collaborators, you should follow these indications:
|
||||
|
||||
1. Be sure the bug is associated with a ticket and indicate that you'll work on it.
|
||||
1. Be sure the bug is associated with a ticket and indicate that you’ll work on it.
|
||||
2. [Fork the project repository](https://help.github.com/articles/fork-a-repo/).
|
||||
3. [Create a new branch](https://help.github.com/articles/creating-and-deleting-branches-within-your-repository/). The name of the branch should be clear, and ideally prefixed by the related ticket id. For instance, `783-contributing-file` to fix [ticket #783](https://github.com/FreshRSS/FreshRSS/issues/783).
|
||||
4. Make your changes to your fork and [send a pull request](https://help.github.com/articles/using-pull-requests/).
|
||||
|
||||
If you have to write code, please follow [our coding style recommendations](developers/02_First_steps.md).
|
||||
|
||||
**Tip:** if you're searching for easy-to-fix bugs, please have a look at the "[good first issue](https://github.com/FreshRSS/FreshRSS/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22)" ticket label.
|
||||
**Tip:** if you’re searching for easy-to-fix bugs, please have a look at the “[good first issue](https://github.com/FreshRSS/FreshRSS/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22)” ticket label.
|
||||
|
||||
## Submit an idea
|
||||
|
||||
You have great ideas, yes! Don't be shy and open [a new ticket](https://github.com/FreshRSS/FreshRSS/issues/new) on our bug tracker to ask if we can implement it. The greatest ideas often come from the shyest suggestions!
|
||||
You have great ideas, yes! Don’t be shy and open [a new ticket](https://github.com/FreshRSS/FreshRSS/issues/new) on our bug tracker to ask if we can implement it. The greatest ideas often come from the shyest suggestions!
|
||||
|
||||
If your idea is nice, we'll have a look at it.
|
||||
If your idea is nice, we’ll have a look at it.
|
||||
|
||||
## Contribute to internationalization (i18n)
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
## First Steps
|
||||
|
||||
Start by creating your development environment. A guide to setting up FreshRSS's development environment can be found on [the appropriate page](02_First_steps.md).
|
||||
Start by creating your development environment. A guide to setting up FreshRSS’s development environment can be found on [the appropriate page](02_First_steps.md).
|
||||
|
||||
## After That
|
||||
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
# Environment configuration (Docker)
|
||||
|
||||
FreshRSS is built with PHP and uses a homemade framework, Minz. The dependencies are directly included in the source code, so you don't need Composer.
|
||||
FreshRSS is built with PHP and uses a homemade framework, Minz. The dependencies are directly included in the source code, so you don’t need Composer.
|
||||
|
||||
There are various ways to configure your development environment. The easiest and most supported method is based on Docker, which is the solution documented below. If you already have a working PHP environment, you probably don't need it.
|
||||
There are various ways to configure your development environment. The easiest and most supported method is based on Docker, which is the solution documented below. If you already have a working PHP environment, you probably don’t need it.
|
||||
|
||||
We assume here that you use a GNU/Linux distribution, capable of running Docker. Otherwise, you'll have to adapt the commands accordingly.
|
||||
We assume here that you use a GNU/Linux distribution, capable of running Docker. Otherwise, you’ll have to adapt the commands accordingly.
|
||||
|
||||
The commands that follow have to be executed in a console. They start by `$` when commands need to be executed as normal user, and by `#` when they need to be executed as root user. You don't have to type these characters. A path may be indicated before these characters to help you identify where they need to be executed. For instance, `app$ echo 'Hello World'` indicates that you have to execute `echo` command in the `app/` directory.
|
||||
The commands that follow have to be executed in a console. They start by `$` when commands need to be executed as normal user, and by `#` when they need to be executed as root user. You don’t have to type these characters. A path may be indicated before these characters to help you identify where they need to be executed. For instance, `app$ echo 'Hello World'` indicates that you have to execute `echo` command in the `app/` directory.
|
||||
|
||||
First, you need to install [Docker](https://docs.docker.com/install/linux/docker-ce/ubuntu/).
|
||||
|
||||
Once you're done, clone the repository with:
|
||||
Once you’re done, clone the repository with:
|
||||
|
||||
```sh
|
||||
git clone https://github.com/FreshRSS/FreshRSS.git
|
||||
|
@ -25,7 +25,7 @@ Then, the only command you need to know is the following:
|
|||
make start
|
||||
```
|
||||
|
||||
This might take some time while Docker downloads the image. If your user isn't in the `docker` group, you'll need to prepend the command with `sudo`.
|
||||
This might take some time while Docker downloads the image. If your user isn’t in the `docker` group, you’ll need to prepend the command with `sudo`.
|
||||
|
||||
**You can now access FreshRSS at [http://localhost:8080](http://localhost:8080).** Just follow the install process and select the SQLite database.
|
||||
|
||||
|
@ -35,7 +35,7 @@ You can stop the containers by typing <kbd>Control</kbd> + <kbd>c</kbd> or with
|
|||
make stop
|
||||
```
|
||||
|
||||
If you're interested in the configuration, the `make` commands are defined in the [`Makefile`](/Makefile).
|
||||
If you’re interested in the configuration, the `make` commands are defined in the [`Makefile`](/Makefile).
|
||||
|
||||
If you need to use a different tag image (default is `alpine`), you can set the `TAG` environment variable:
|
||||
|
||||
|
@ -65,9 +65,9 @@ If you want to create your own FreshRSS extension, take a look at the [extension
|
|||
|
||||
## Coding style
|
||||
|
||||
If you want to contribute to the source code, it's important to follow the project's coding style. The actual code doesn't always follow it throughout the project, but we should fix it every time an opportunity presents itself.
|
||||
If you want to contribute to the source code, it’s important to follow the project’s coding style. The actual code doesn’t always follow it throughout the project, but we should fix it every time an opportunity presents itself.
|
||||
|
||||
Contributions which don't follow the coding style will be rejected as long as the coding style is not fixed.
|
||||
Contributions which don’t follow the coding style will be rejected as long as the coding style is not fixed.
|
||||
|
||||
## Spaces, tabs and other whitespace characters
|
||||
|
||||
|
@ -119,7 +119,7 @@ echo $a ? 1 : 0;
|
|||
|
||||
### Parentheses
|
||||
|
||||
There should be no spaces in between brackets. There should be no spaces before the opening bracket, except if it's after a keyword. There shouldn't be any spaces after the closing bracket, except if it's followed by a curly bracket.
|
||||
There should be no spaces in between brackets. There should be no spaces before the opening bracket, except if it’s after a keyword. There shouldn’t be any spaces after the closing bracket, except if it’s followed by a curly bracket.
|
||||
|
||||
```php
|
||||
if ($a == 10) {
|
||||
|
@ -133,7 +133,7 @@ if ((int)$a == 10) {
|
|||
|
||||
### With chained functions
|
||||
|
||||
It happens most of the time in Javascript files. When there are chained functions with closures and callback functions, it's hard to understand the code if not properly formatted. In those cases, we add a new indent level for the complete instruction and reset the indent for a new instruction on the same level.
|
||||
It happens most of the time in Javascript files. When there are chained functions with closures and callback functions, it’s hard to understand the code if not properly formatted. In those cases, we add a new indent level for the complete instruction and reset the indent for a new instruction on the same level.
|
||||
|
||||
```javascript
|
||||
// First instruction
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
If you are new to Git, here are some of the resources you might find useful:
|
||||
|
||||
* [GitHub's blog post](https://github.com/blog/120-new-to-git)
|
||||
* [GitHub’s blog post](https://github.com/blog/120-new-to-git)
|
||||
* <http://try.github.com/>
|
||||
* <http://sixrevisions.com/resources/git-tutorials-beginners/>
|
||||
* <http://rogerdudler.github.io/git-guide/>
|
||||
|
|
|
@ -26,7 +26,7 @@ Note: it is quite conceivable that the functionalities of an extension can later
|
|||
|
||||
**TODO** : move to 02_Minz.md
|
||||
|
||||
This data sheet should refer to the official FreshRSS and Minz documentation (the PHP framework on which FreshRSS is based). Unfortunately, this documentation does not yet exist. In a few words, here are the main things you should know. It is not necessary to read all the chapters in this section if you don't need to use a feature in your extension (if you don't need to translate your extension, no need to know more about the `Minz_Translate` module for example).
|
||||
This data sheet should refer to the official FreshRSS and Minz documentation (the PHP framework on which FreshRSS is based). Unfortunately, this documentation does not yet exist. In a few words, here are the main things you should know. It is not necessary to read all the chapters in this section if you don’t need to use a feature in your extension (if you don’t need to translate your extension, no need to know more about the `Minz_Translate` module for example).
|
||||
|
||||
### MVC Architecture
|
||||
|
||||
|
@ -214,13 +214,13 @@ This part [is explained here](/docs/en/internationalization.md).
|
|||
|
||||
## Write an extension for FreshRSS
|
||||
|
||||
Here we are! We've talked about the most useful features of Minz and how to run FreshRSS correctly and it's about time to address the extensions themselves.
|
||||
Here we are! We’ve talked about the most useful features of Minz and how to run FreshRSS correctly and it’s about time to address the extensions themselves.
|
||||
|
||||
An extension allows you to easily add functionality to FreshRSS without having to touch the core of the project directly.
|
||||
|
||||
### Make it work in Docker
|
||||
|
||||
When working on an extension, it's easier to see it working directly in its environment. With Docker, you can leverage the use of the ```volume``` option when starting the container. Hopefully, you can use it without Docker-related knowledge by using the Makefile rule:
|
||||
When working on an extension, it’s easier to see it working directly in its environment. With Docker, you can leverage the use of the ```volume``` option when starting the container. Hopefully, you can use it without Docker-related knowledge by using the Makefile rule:
|
||||
```sh
|
||||
make start extensions="/full/path/to/extension/1 /full/path/to/extension/2"
|
||||
```
|
||||
|
@ -266,7 +266,7 @@ In addition, it is good to have a `LICENSE` file indicating the license under wh
|
|||
The `metadata.json` file defines your extension through a number of important elements. It must contain a valid JSON array containing the following entries:
|
||||
|
||||
* `name`: the name of your extension
|
||||
* `author`: your name, your e-mail address ... but there is no specific format to adopt
|
||||
* `author`: your name, your e-mail address … but there is no specific format to adopt
|
||||
* `description`: a description of your extension
|
||||
* `version`: the current version number of the extension
|
||||
* `entrypoint`: Indicates the entry point of your extension. It must match the name of the class contained in the file `extension.php` without the suffix `Extension`
|
||||
|
@ -291,11 +291,11 @@ It must define some key elements to be loaded by the extension system:
|
|||
1. The class must define the `init` method. This method is called **only** if the extension is loaded. Its purpose is to initialize the extension and its behavior during every page load.
|
||||
|
||||
The `Minz_Extension` abstract class defines a set of methods that can be overridden to fit your needs:
|
||||
* the `install` method is called when the user enables the extension in the configuration page. It must return _true_ when successful and a string containing an error message when not. Its purpose is to prepare FreshRSS for the extension (adding a table to the database, creating a folder tree, ...).
|
||||
* the `uninstall` method is called when the user disables the extension in the configuration page. It must return _true_ when successful and a string containing an error message when not. Its purpose is to clean FreshRSS (removing a table from the database, deleting a folder tree, ...). Usually it reverts changes introduced by the `install` method.
|
||||
* the `install` method is called when the user enables the extension in the configuration page. It must return _true_ when successful and a string containing an error message when not. Its purpose is to prepare FreshRSS for the extension (adding a table to the database, creating a folder tree, …).
|
||||
* the `uninstall` method is called when the user disables the extension in the configuration page. It must return _true_ when successful and a string containing an error message when not. Its purpose is to clean FreshRSS (removing a table from the database, deleting a folder tree, …). Usually it reverts changes introduced by the `install` method.
|
||||
* the `handleConfigureAction` method is called when a user loads the extension configuration panel. It contains the logic to validate and store the submitted values defined in the `configure.phtml` file.
|
||||
|
||||
> If your extension code is scattered in different classes, you need to load their source before using them. Of course you could include the files manually, but it's more efficient to load them automatically. To do so, you just need to define the `autoload` method which will include them when needed. This method will be registered automatically when the extension is enabled.
|
||||
> If your extension code is scattered in different classes, you need to load their source before using them. Of course you could include the files manually, but it’s more efficient to load them automatically. To do so, you just need to define the `autoload` method which will include them when needed. This method will be registered automatically when the extension is enabled.
|
||||
|
||||
The `Minz_Extension` abstract class defines another set of methods that should not be overridden:
|
||||
* the `getName`, `getEntrypoint`, `getPath`, `getAuthor`, `getDescription`, `getVersion`, and `getType` methods return the extension internal properties. Those properties are extracted from the `metadata.json` file.
|
||||
|
@ -311,7 +311,7 @@ The `Minz_Extension` abstract class defines another set of methods that should n
|
|||
* the `setUserConfiguration` method stores the extension configuration for the current user.
|
||||
* the `removeUserConfiguration` method removes the extension configuration for the current user.
|
||||
|
||||
> Note that if you modify the later set of methods, you might break the extension system. Thus making FreshRSS unusable. So it's highly recommended to let those unmodified.
|
||||
> Note that if you modify the later set of methods, you might break the extension system. Thus making FreshRSS unusable. So it’s highly recommended to let those unmodified.
|
||||
|
||||
### The "hooks" system
|
||||
|
||||
|
@ -332,7 +332,7 @@ class HelloWorldExtension extends Minz_Extension
|
|||
|
||||
The following events are available:
|
||||
|
||||
* `check_url_before_add` (`function($url) -> Url | null`): will be executed every time a URL is added. The URL itself will be passed as parameter. This way a website known to have feeds which doesn't advertise it in the header can still be automatically supported.
|
||||
* `check_url_before_add` (`function($url) -> Url | null`): will be executed every time a URL is added. The URL itself will be passed as parameter. This way a website known to have feeds which doesn’t advertise it in the header can still be automatically supported.
|
||||
* `entry_before_display` (`function($entry) -> Entry | null`): will be executed every time an entry is rendered. The entry itself (instance of FreshRSS\_Entry) will be passed as parameter.
|
||||
* `entry_before_insert` (`function($entry) -> Entry | null`): will be executed when a feed is refreshed and new entries will be imported into the database. The new entry (instance of FreshRSS\_Entry) will be passed as parameter.
|
||||
* `feed_before_actualize` (`function($feed) -> Feed | null`): will be executed when a feed is updated. The feed (instance of FreshRSS\_Feed) will be passed as parameter.
|
||||
|
|
|
@ -12,7 +12,7 @@ make test
|
|||
|
||||
This command downloads the PHPUnit binary and verifies its checksum. If the verification fails, the file is deleted. In this case, you should [open an issue on GitHub](https://github.com/FreshRSS/FreshRSS/issues/new) to let maintainers know about the problem.
|
||||
|
||||
Then, it executes PHPUnit in a Docker container. If you don't use Docker, you can run the command directly with:
|
||||
Then, it executes PHPUnit in a Docker container. If you don’t use Docker, you can run the command directly with:
|
||||
|
||||
```sh
|
||||
NO_DOCKER=true make test
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
The easiest way to create a theme is by copying and modifying the base theme (or another of the pre-installed themes). The base theme can be found in [/p/themes/base-theme](https://github.com/FreshRSS/FreshRSS/tree/edge/p/themes/base-theme). Themes require:
|
||||
|
||||
- a **metadata.json** file to describe the theme.
|
||||
- a **loader.gif** file to use as a loading icon (assuming .loading's background has not been overridden)
|
||||
- a **loader.gif** file to use as a loading icon (assuming .loading’s background has not been overridden)
|
||||
- an **icons** folder containing .svg, .ico, and .png files to override existing icons
|
||||
- a **thumbs** folder containing a file, **original.png** that will be used as the preview for the theme
|
||||
|
||||
|
@ -19,7 +19,7 @@ RTL (right-to-left) support for languages such as Hebrew and Arabic is handled t
|
|||
|
||||
## Overriding icons
|
||||
|
||||
To replace the default icons, add an "icons" folder to your theme's folder. Use files with the same name as the default icon to override them.
|
||||
To replace the default icons, add an "icons" folder to your theme’s folder. Use files with the same name as the default icon to override them.
|
||||
|
||||
## Template file
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# Opening a pull request
|
||||
|
||||
So you want to propose a patch to the community? It's time to open a [pull request](https://github.com/FreshRSS/FreshRSS/pulls)!
|
||||
So you want to propose a patch to the community? It’s time to open a [pull request](https://github.com/FreshRSS/FreshRSS/pulls)!
|
||||
|
||||
When you open a PR, your message will be prefilled with a message based on [a template](https://github.com/FreshRSS/FreshRSS/blob/edge/docs/pull_request_template.md). It contains a checklist to make sure you didn't forget anything. It is very important to verify you did everything mentioned so documentation is up-to-date, the commit history stays clear and the code is always stable.
|
||||
When you open a PR, your message will be prefilled with a message based on [a template](https://github.com/FreshRSS/FreshRSS/blob/edge/docs/pull_request_template.md). It contains a checklist to make sure you didn’t forget anything. It is very important to verify you did everything mentioned so documentation is up-to-date, the commit history stays clear and the code is always stable.
|
||||
|
||||
The rest of this document explains specific points.
|
||||
|
||||
|
@ -12,11 +12,11 @@ The rest of this document explains specific points.
|
|||
|
||||
Rebasing a branch is useful to make sure your code is based on the most recent version of FreshRSS and there are no conflicts. You have two ways to do that.
|
||||
|
||||
If you have any doubt, please let us know and we'll help you! We all began with Git one day and it's not an easy thing to work with.
|
||||
If you have any doubt, please let us know and we’ll help you! We all began with Git one day and it’s not an easy thing to work with.
|
||||
|
||||
### Rebasing
|
||||
|
||||
Rebasing is the cleanest method because the Git history will be completely linear and consequently easier to read and navigate. It might also be more difficult if you're not at ease with Git since conflicts are harder to resolve.
|
||||
Rebasing is the cleanest method because the Git history will be completely linear and consequently easier to read and navigate. It might also be more difficult if you’re not at ease with Git since conflicts are harder to resolve.
|
||||
|
||||
Note that you should never rebase a branch if someone else is working on it. Otherwise, since it rewrites the history, it can be a real mess to sort it out.
|
||||
|
||||
|
@ -33,7 +33,7 @@ If you feel confident, you can use `git rebase -i edge` to rewrite your history
|
|||
|
||||
### Merging
|
||||
|
||||
If you prefer, you can simply merge `edge` into your own branch. Conflicts might be easier to resolve, but your Git history will be less readable. Don't worry, we'll take care of it before merging your PR back into `edge`.
|
||||
If you prefer, you can simply merge `edge` into your own branch. Conflicts might be easier to resolve, but your Git history will be less readable. Don’t worry, we will take care of it before merging your PR back into `edge`.
|
||||
|
||||
To merge `edge`:
|
||||
|
||||
|
@ -46,13 +46,13 @@ git merge edge # merge edge into your branch
|
|||
|
||||
## How to write a Git commit message
|
||||
|
||||
It's important to have proper commit messages in order to facilitate later debugging, so please read the following advice. Commit messages should explain the choices made in the past (the “why?”)
|
||||
It’s important to have proper commit messages in order to facilitate later debugging, so please read the following advice. Commit messages should explain the choices made in the past (the “why?”)
|
||||
|
||||
The first line should start with a verb (e.g., "Add") and explain the objective of the commit in few words. It's usually less than 50 characters so it remains concise. You can consider this line the subject of your commit. Think of it as the second part of a sentence that starts with the words "This commit will."
|
||||
The first line should start with a verb (e.g., “Add”) and explain the objective of the commit in few words. It’s usually less than 50 characters so it remains concise. You can consider this line the subject of your commit. Think of it as the second part of a sentence that starts with the words “This commit will.”
|
||||
|
||||
* This commit will *add feature X*
|
||||
|
||||
Then, insert a blank line, and start to write the body. It's usually wrapped at 72 characters, but you are pretty free in the tone of the message. The body is the place where you can clarify the context of your patch. For instance, you can explain what you were doing when you identified a bug, or the problem you had before your patch. Providing this information helps other developers understand why a specific choice was made, especially when a patch introduces a bug that is identified months later.
|
||||
Then, insert a blank line, and start to write the body. It’s usually wrapped at 72 characters, but you are pretty free in the tone of the message. The body is the place where you can clarify the context of your patch. For instance, you can explain what you were doing when you identified a bug, or the problem you had before your patch. Providing this information helps other developers understand why a specific choice was made, especially when a patch introduces a bug that is identified months later.
|
||||
|
||||
You also can add references (e.g., the URL to the initial ticket in the bug tracker, or a reference to some forum explaining a point).
|
||||
|
||||
|
@ -60,16 +60,16 @@ You can find more information about commit messages [on this blog post](https://
|
|||
|
||||
## How to write tests
|
||||
|
||||
FreshRSS has few tests for now, but we're working on it. We added this point to the checklist to help us to write more tests, and we would really appreciate it if you wrote a test that ensures your patch is working.
|
||||
FreshRSS has few tests for now, but we’re working on it. We added this point to the checklist to help us to write more tests, and we would really appreciate it if you wrote a test that ensures your patch is working.
|
||||
|
||||
We use [PHPUnit](https://phpunit.de/) version 7.5 ([documentation](https://phpunit.readthedocs.io/en/7.5/)).
|
||||
|
||||
You'll find more information on how to run tests [in this document](03_Running_tests.md).
|
||||
You’ll find more information on how to run tests [in this document](03_Running_tests.md).
|
||||
|
||||
Feel free to ask us for assistance. Not everything will be easy to test, so don't spend too much time on this.
|
||||
Feel free to ask us for assistance. Not everything will be easy to test, so don’t spend too much time on this.
|
||||
|
||||
## Why you should write documentation
|
||||
|
||||
A friendly project should have correct and complete documentation, so newcomers don't have to ask too many questions, and users can find answers to their problems. The documentation should not be written “later” or chances are it'll never be.
|
||||
A friendly project should have correct and complete documentation, so newcomers don’t have to ask too many questions, and users can find answers to their problems. The documentation should not be written “later” or chances are it’ll never be.
|
||||
|
||||
Our documentation can still be improved quite a bit, so you're very welcome if you want to help.
|
||||
Our documentation can still be improved quite a bit, so you’re very welcome if you want to help.
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
# Preparing the release
|
||||
|
||||
In order to get as much feedback as possible before a release, it's preferable to announce it on GitHub by creating a dedicated ticket
|
||||
In order to get as much feedback as possible before a release, it’s preferable to announce it on GitHub by creating a dedicated ticket
|
||||
([see examples](https://github.com/FreshRSS/FreshRSS/search?utf8=%E2%9C%93&q=Call+for+testing&type=Issues)). This should be done **at least one week in advance**.
|
||||
|
||||
It's also recommended to make the announcement on mailing@freshrss.org.
|
||||
It’s also recommended to make the announcement on mailing@freshrss.org.
|
||||
|
||||
## Check the dev status
|
||||
|
||||
|
@ -27,7 +27,7 @@ $ git push && git push --tags
|
|||
|
||||
## Updating `update.freshrss.org`
|
||||
|
||||
It's important to update update.freshrss.org since this is the default service for automatic FreshRSS updates.
|
||||
It’s important to update update.freshrss.org since this is the default service for automatic FreshRSS updates.
|
||||
|
||||
The repository managing the code is located on GitHub: [FreshRSS/update.freshrss.org](https://github.com/FreshRSS/update.freshrss.org/).
|
||||
|
||||
|
@ -35,7 +35,7 @@ The repository managing the code is located on GitHub: [FreshRSS/update.freshrss
|
|||
|
||||
The scripts are located in the `./scripts/` directory and must take the form `update_to_x.y.z.z.php`. This directory also contains `update_to_dev.php` intended for updates of the `edge` branch (this script must not include code specific to a particular version!) and `update_util.php`, which contains a list of functions useful for all scripts.
|
||||
|
||||
In order to write a new script, it's better to copy/paste the last version or to start from `update_to_dev.php`. The first thing to do is to define the URL from which the FreshRSS package will be downloaded (`PACKAGE_URL`). The URL is in the form of `https://codeload.github.com/FreshRSS/FreshRSS/zip/x.y.z`.
|
||||
In order to write a new script, it’s better to copy/paste the last version or to start from `update_to_dev.php`. The first thing to do is to define the URL from which the FreshRSS package will be downloaded (`PACKAGE_URL`). The URL is in the form of `https://codeload.github.com/FreshRSS/FreshRSS/zip/x.y.z`.
|
||||
|
||||
There are then 5 functions that have to be executed:
|
||||
|
||||
|
@ -47,9 +47,9 @@ There are then 5 functions that have to be executed:
|
|||
|
||||
## Updating the versions file
|
||||
|
||||
Once the script has been written and versioned, it's necessary to update the `./versions.php' file which contains a mapping table indicating which versions are updated to which other versions.
|
||||
Once the script has been written and versioned, it’s necessary to update the `./versions.php' file which contains a mapping table indicating which versions are updated to which other versions.
|
||||
|
||||
Here's an example of a `versions.php` file:
|
||||
Here’s an example of a `versions.php` file:
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
@ -57,7 +57,7 @@ return array(
|
|||
// STABLE
|
||||
'0.8.0' => '1.0.0',
|
||||
'0.8.1' => '1.0.0',
|
||||
'1.0.0' => '1.0.1', // doesn't exist (yet)
|
||||
'1.0.0' => '1.0.1', // doesn’t exist (yet)
|
||||
// DEV
|
||||
'1.1.2-dev' => 'dev',
|
||||
'1.1.3-dev' => 'dev',
|
||||
|
@ -65,21 +65,21 @@ return array(
|
|||
);
|
||||
```
|
||||
|
||||
And here's how this table works:
|
||||
And here’s how this table works:
|
||||
|
||||
* on the left you can find the N version, on the right the N+1 version;
|
||||
* the `x.y.z.z-dev` versions are **all** updated to `edge`;
|
||||
* stable versions are updated to stable versions;
|
||||
* it's possible to skip several versions at once, provided that the update scripts support it;
|
||||
* it's advisable to indicate the correspondence of the current version to its potential future version by specifying that this version does not yet exist. As long as the corresponding script does not exist, nothing will happen.
|
||||
* it’s possible to skip several versions at once, provided that the update scripts support it;
|
||||
* it’s advisable to indicate the correspondence of the current version to its potential future version by specifying that this version does not yet exist. As long as the corresponding script does not exist, nothing will happen.
|
||||
|
||||
It's **very strongly** recommended to keep this file organized according to version numbers by separating stable and dev versions.
|
||||
It’s**very strongly** recommended to keep this file organized according to version numbers by separating stable and dev versions.
|
||||
|
||||
## Deployment
|
||||
|
||||
Before updating update.freshrss.org, it's better to test with dev.update.freshrss.org, which corresponds to pre-production. So update dev.update.freshrss.org and change the `FRESHRSS_UPDATE_WEBSITE` URL of your FreshRSS instance. Start the update and check that it's running correctly.
|
||||
Before updating update.freshrss.org, it’s better to test with dev.update.freshrss.org, which corresponds to pre-production. So update dev.update.freshrss.org and change the `FRESHRSS_UPDATE_WEBSITE` URL of your FreshRSS instance. Start the update and check that it’s running correctly.
|
||||
|
||||
When you're satisfied, update update.freshrss.org with the new script, test it again, and then move on.
|
||||
When you’re satisfied, update update.freshrss.org with the new script, test it again, and then move on.
|
||||
|
||||
## Updating the FreshRSS services
|
||||
|
||||
|
@ -90,7 +90,7 @@ Two services need to be updated immediately after the update.
|
|||
|
||||
## Publicly announce the release
|
||||
|
||||
When everything's working, it's time to announce the release to the world!
|
||||
When everything’s working, it’s time to announce the release to the world!
|
||||
|
||||
* on GitHub by creating[a new release](https://github.com/FreshRSS/FreshRSS/releases/new)
|
||||
* on the freshrss.org blog, at least for stable versions (write the article on[FreshRSS/freshrss.org](https://github.com/FreshRSS/freshrss.org))
|
||||
|
|
|
@ -7,7 +7,7 @@ Additionally [page about our Google Reader compatible API](06_GoogleReader_API.m
|
|||
## RSS clients
|
||||
|
||||
There are many RSS clients that support the Fever API, but they seem to understand the Fever API a bit differently.
|
||||
If your favourite client doesn't work properly with this API, please create an issue and we'll have a look.
|
||||
If your favourite client doesn’t work properly with this API, please create an issue and we’ll have a look.
|
||||
But we can **only** do that for free clients.
|
||||
|
||||
### Usage & Authentication
|
||||
|
@ -80,7 +80,7 @@ This should give:
|
|||
"last_refreshed_on_time": "1520013061"
|
||||
}
|
||||
```
|
||||
Perfect, you're now authenticated and you can start testing the more advanced features. To do so, change the URL and append the possible API actions to your request parameters. Please refer to the [original Fever documentation](https://feedafever.com/api) for more information.
|
||||
Perfect, you’re now authenticated and you can start testing the more advanced features. To do so, change the URL and append the possible API actions to your request parameters. Please refer to the [original Fever documentation](https://feedafever.com/api) for more information.
|
||||
|
||||
Some basic calls are:
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ Additionally [page about our Fever compatible API](06_Fever_API.md) for another
|
|||
## RSS clients
|
||||
|
||||
There are many RSS clients that support the Fever API, but they might understand the API a bit differently.
|
||||
If your favourite client doesn't work properly with this API, please create an issue and we'll have a look.
|
||||
If your favourite client doesn’t work properly with this API, please create an issue and we’ll have a look.
|
||||
But we can **only** do that for free clients.
|
||||
|
||||
## Usage & Authentication
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
# Reporting a bug or a suggestion
|
||||
|
||||
Despite the care given to FreshRSS, it's still possible that bugs occur. Development is dynamic, so issues can be corrected quickly. You might also have a feature in mind that doesn't yet exist. Regardless whether your idea seems silly, far-fetched, useless or too specific, please don't hesitate to propose it to us! "Ideas in the air" often find an attentive ear. It's new external perspectives that make the project evolve the most.
|
||||
Despite the care given to FreshRSS, it’s still possible that bugs occur. Development is dynamic, so issues can be corrected quickly. You might also have a feature in mind that doesn’t yet exist. Regardless whether your idea seems silly, far-fetched, useless or too specific, please don’t hesitate to propose it to us! “Ideas in the air” often find an attentive ear. It’s new external perspectives that make the project evolve the most.
|
||||
|
||||
If you're convinced that you should be heard, here's how you can go about it.
|
||||
If you’re convinced that you should be heard, here’s how you can go about it.
|
||||
|
||||
## On GitHub
|
||||
|
||||
GitHub is the ideal platform to submit your requests. It allows us to discuss a problem or suggestion with others and it often generates new ideas. Let's not neglect this "social" aspect!
|
||||
GitHub is the ideal platform to submit your requests. It allows us to discuss a problem or suggestion with others and it often generates new ideas. Let’s not neglect this “social” aspect!
|
||||
|
||||
1. [Go to the bug ticket manager](https://github.com/FreshRSS/FreshRSS/issues)
|
||||
2. Start by checking if a similar request hasn't already been made. If so, please feel free to add your voice to the request.
|
||||
2. Start by checking if a similar request hasn’t already been made. If so, please feel free to add your voice to the request.
|
||||
3. If your request is new, [open a new bug ticket](https://github.com/FreshRSS/FreshRSS/issues/new)
|
||||
4. Finally, write your request. If you're fluent in English, it's the preferred language because it allows for discussion with the largest number of people.
|
||||
4. Finally, write your request. If you’re fluent in English, it’s the preferred language because it allows for discussion with the largest number of people.
|
||||
5. Please follow the tips below to make it easier to let your ticket be heard.
|
||||
|
||||
## Informal
|
||||
|
@ -29,17 +29,17 @@ Not everyone likes or uses GitHub for a variety of legitimate reasons. That is w
|
|||
Here are some tips to help you present your bug report or suggestion:
|
||||
|
||||
|
||||
* **Pay attention to spelling**. Even if it's not always easy, try your best!
|
||||
* **Give an explicit title to your request**, even if it's a bit long. This not only helps us understand your request, but also to find your ticket later.
|
||||
* **One request = one ticket.** You may have lots of ideas while being afraid to spam the bug manager: it doesn't matter. It's better to have a few too many tickets than too many requests in one. We'll close and consolidate requests when possible.
|
||||
* **Pay attention to spelling**. Even if it’s not always easy, try your best!
|
||||
* **Give an explicit title to your request**, even if it’s a bit long. This not only helps us understand your request, but also to find your ticket later.
|
||||
* **One request = one ticket.** You may have lots of ideas while being afraid to spam the bug manager: it doesn’t matter. It’s better to have a few too many tickets than too many requests in one. We’ll close and consolidate requests when possible.
|
||||
* If you report a bug, think about **providing us with the FreshRSS logs** (accessible in the FreshRSS `data/log/` folder) and the **PHP logs** (the location may vary by distribution, but consider searching in `/var/log/httpd` or `/var/log/apache`).
|
||||
* If you can't find the log files, specify it in your ticket so we know you've already searched.
|
||||
* If you can’t find the log files, specify it in your ticket so we know you’ve already searched.
|
||||
* Not all bugs require logs, but if you have any doubts, it is better to provide them to us. Logs are important and very useful for debugging!
|
||||
* The logs may reveal confidential information, so **be careful not to disclose anything sensitive.**
|
||||
|
||||
In addition, when facing a bug, you're encouraged to follow this message format (from the [Sam & Max website](http://sametmax.com/template-de-demande-daide-en-informatique/):
|
||||
In addition, when facing a bug, you’re encouraged to follow this message format (from the [Sam & Max website](http://sametmax.com/template-de-demande-daide-en-informatique/):
|
||||
|
||||
### What's my goal?
|
||||
### What’s my goal?
|
||||
|
||||
Give the general context of what you were trying to do.
|
||||
|
||||
|
@ -49,7 +49,7 @@ Explain step by step what you have done so that we can reproduce the bug.
|
|||
|
||||
### What results have I achieved?
|
||||
|
||||
The bug: what you see that shouldn't have happened. Here you can provide the logs.
|
||||
The bug: what you see that shouldn’t have happened. Here you can provide the logs.
|
||||
|
||||
### What was the expected result?
|
||||
|
||||
|
@ -63,4 +63,4 @@ Remember to give the following information if you know it:
|
|||
2. Which server: Apache, Nginx? Which version?
|
||||
3. Which version of PHP?
|
||||
4. Which database: SQLite, MySQL, MariaDB, PostgreSQL? Which version?
|
||||
5. Which distribution runs on the server? And... which version?
|
||||
5. Which distribution runs on the server? And… which version?
|
||||
|
|
|
@ -4,7 +4,7 @@ Thanks to our contributors, FreshRSS is translated into more than 15 languages.
|
|||
|
||||
## Overview
|
||||
|
||||
It is common (and that's an understatement) to want to show some text to the user. The problem is that FreshRSS has users of different nationalities. It is therefore necessary to be able to manage different languages in order not to remain confined to English or French.
|
||||
It is common (and that’s an understatement) to want to show some text to the user. The problem is that FreshRSS has users of different nationalities. It is therefore necessary to be able to manage different languages in order not to remain confined to English or French.
|
||||
|
||||
The solution is to use the `Minz_Translate` module, which allows dynamic translation of FreshRSS. Before using this module, it is necessary to know where to find the strings to be translated. Each language has its own subdirectory in a parent directory named `app/i18n/`. For example, English language files are located in [`app/i18n/en/`](/app/i18n/en/). There are seven different files:
|
||||
|
||||
|
@ -19,7 +19,7 @@ The solution is to use the `Minz_Translate` module, which allows dynamic transla
|
|||
|
||||
This organization makes it possible to avoid a single huge translation file.
|
||||
|
||||
The translation files are quite simple: it's only a matter of returning a PHP array containing the translations. As an example, here's an extract from [`app/i18n/fr/gen.php`](/app/i18n/fr/gen.php):
|
||||
The translation files are quite simple: it’s only a matter of returning a PHP array containing the translations. As an example, here’s an extract from [`app/i18n/fr/gen.php`](/app/i18n/fr/gen.php):
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
@ -42,23 +42,23 @@ return array(
|
|||
|
||||
Each value can be referenced by a key: it consists of a series of identifiers separated by dots. The first identifier indicates from which file to extract the translation, while the following ones indicate array entries. Thus, the `gen.freshrss.about` key is referencing the `about` entry from the `freshrss` entry which is part of the main array returned by the `gen.php` file. This allows us to further organize our translation files.
|
||||
|
||||
You should not have to write the array by yourself and we provide several commands to ease the manipulation of these files. Let's see some common use cases.
|
||||
You should not have to write the array by yourself and we provide several commands to ease the manipulation of these files. Let’s see some common use cases.
|
||||
|
||||
## Add support for a new language
|
||||
|
||||
If you want to add support for a language which isn't supported by FreshRSS yet, you can run this command:
|
||||
If you want to add support for a language which isn’t supported by FreshRSS yet, you can run this command:
|
||||
|
||||
```sh
|
||||
make i18n-add-language lang=[your language code]
|
||||
```
|
||||
|
||||
You must replace `[your language code]` by the language tag of your language. It must follow the [IETF BCP 47 standard](https://en.wikipedia.org/wiki/IETF_language_tag). For instance, English is `en` and French is `fr`. You can target a specific region with a subtag, for instance `pt-br` for Brazilian Portuguese. If you're not sure of the code, Wikipedia might be a good start to find it or you can ask us for help too.
|
||||
You must replace `[your language code]` by the language tag of your language. It must follow the [IETF BCP 47 standard](https://en.wikipedia.org/wiki/IETF_language_tag). For instance, English is `en` and French is `fr`. You can target a specific region with a subtag, for instance `pt-br` for Brazilian Portuguese. If you’re not sure of the code, Wikipedia might be a good start to find it or you can ask us for help too.
|
||||
|
||||
The command will create a new subfolder under `app/i18n/` and copy the strings from the reference language (i.e. English). It will also mark all the translations with a special tag represented by a comment: `// TODO - Translation`. We'll see in the next section how to translate the strings.
|
||||
The command will create a new subfolder under `app/i18n/` and copy the strings from the reference language (i.e. English). It will also mark all the translations with a special tag represented by a comment: `// TODO - Translation`. We’ll see in the next section how to translate the strings.
|
||||
|
||||
## Translate the interface
|
||||
|
||||
You might have noticed some strings are not yet translated from English even though you've selected a different language. This is because we mostly speak English or French and it's pretty difficult to us to speak all the different languages!
|
||||
You might have noticed some strings are not yet translated from English even though you’ve selected a different language. This is because we mostly speak English or French and it’s pretty difficult to us to speak all the different languages!
|
||||
|
||||
To update a string, you just have to open its file, find the string, and change it (without removing the quotes around it!) You might want to remove the comment at the end of the line, but you should prefer to use the following command:
|
||||
|
||||
|
@ -66,7 +66,7 @@ To update a string, you just have to open its file, find the string, and change
|
|||
make i18n-format
|
||||
```
|
||||
|
||||
It will remove the comments on the lines that you've changed, and will reformat the file correctly. If you've made any mistakes, it will fix them automatically or it will tell you it can't (well… the command will dramatically fail without any damage, don't worry).
|
||||
It will remove the comments on the lines that you’ve changed, and will reformat the file correctly. If you’ve made any mistakes, it will fix them automatically or it will tell you it can’t (well… the command will dramatically fail without any damage, don’t worry).
|
||||
|
||||
The strings to translate can be easily found in the translations files thanks to the tag we spoke about at the end of the previous section. Indeed, it indicates to our tools that the strings are not translated yet. This means you can find them with Git. For instance for the Greek language:
|
||||
|
||||
|
@ -86,7 +86,7 @@ This command adds an IGNORE comment on the translation so the key can be conside
|
|||
|
||||
## Add/remove/update a key
|
||||
|
||||
If you're developping a new part of the application, you might want to declare a new translation key. Your first impulse would be to add the key to each file manually: don't do that, it's very painful. We provide another command:
|
||||
If you’re developping a new part of the application, you might want to declare a new translation key. Your first impulse would be to add the key to each file manually: don’t do that, it’s very painful. We provide another command:
|
||||
|
||||
```sh
|
||||
make i18n-add-key key=the.key.to.add value='Your string in English'
|
||||
|
@ -100,7 +100,7 @@ Conversely, you may want to remove a key that is no longer used in the applicati
|
|||
make i18n-remove-key key=the.key.to.remove
|
||||
```
|
||||
|
||||
Finally, if the English version of a string needs to be changed, you need to consider two cases. If the change doesn't impact the meaning of the sentence, and therefore other languages don't need to change (e.g. to fix a typo), you should make the change manually in the file. In any other case, you should use the following command:
|
||||
Finally, if the English version of a string needs to be changed, you need to consider two cases. If the change doesn’t impact the meaning of the sentence, and therefore other languages don’t need to change (e.g. to fix a typo), you should make the change manually in the file. In any other case, you should use the following command:
|
||||
|
||||
```sh
|
||||
make i18n-update-key key=the.key.to.change value='The new string in English'
|
||||
|
@ -118,11 +118,11 @@ To access these translations, you must use the `_t()` function (which is a short
|
|||
</p>
|
||||
```
|
||||
|
||||
The function expects a translation key, but there's a special case that sometimes makes life easier: the `_` identifier. This must necessarily be present at the end of the chain and gives a value to the higher-level identifier. It's pretty hard to explain but very simple to understand. In the example given above, an `_` is associated with the value `FreshRSS`: this means that there is no need to write `_t('gen.freshrss._')` but `_t('gen.freshrss')` suffices.
|
||||
The function expects a translation key, but there’s a special case that sometimes makes life easier: the `_` identifier. This must necessarily be present at the end of the chain and gives a value to the higher-level identifier. It’s pretty hard to explain but very simple to understand. In the example given above, an `_` is associated with the value `FreshRSS`: this means that there is no need to write `_t('gen.freshrss._')` but `_t('gen.freshrss')` suffices.
|
||||
|
||||
`_t()` can take any number of variables. The variables will then be replaced in the translation if it contains some “conversion specifications” (usually `%s` or `%d`). You can learn more about these specifications in the [`sprintf()` PHP function documentation](https://www.php.net/manual/function.sprintf).
|
||||
|
||||
For instance, the English translation for `gen.auth.keep_logged_in` is `Keep me logged in <small>(%s days)</small>`. It means this translation expects a string to be passed as an argument to the `t()` function (well, it should be a `%d` because we want a number here, but it doesn't matter). For instance:
|
||||
For instance, the English translation for `gen.auth.keep_logged_in` is `Keep me logged in <small>(%s days)</small>`. It means this translation expects a string to be passed as an argument to the `t()` function (well, it should be a `%d` because we want a number here, but it doesn’t matter). For instance:
|
||||
|
||||
```php
|
||||
<label>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
Learning how to handle a new application is not always easy. We've tried to make FreshRSS as intuitive as possible, but you might still need a little help to master the program.
|
||||
Learning how to handle a new application is not always easy. We’ve tried to make FreshRSS as intuitive as possible, but you might still need a little help to master the program.
|
||||
|
||||
This section will guide you to the pages you need to get started. The order is tailored to newcomers.
|
||||
|
||||
|
@ -14,7 +14,7 @@ Once you have added your feeds to FreshRSS, it is time to read them. There are t
|
|||
2. [The global view](03_Main_view.md#global-view) shows you an overview of the status of your feeds in one glance
|
||||
3. [The reader view](03_Main_view.md#reader-view) offers you a comfortable reading experience
|
||||
|
||||
Now that you've mastered basic use, it's time to configure FreshRSS to improve your reading experience. It's highly configurable, so it's recommended to play around with them to find a configuration that suits you well. Here are a few resources to help you improve your daily FreshRSS experience:
|
||||
Now that you’ve mastered basic use, it’s time to configure FreshRSS to improve your reading experience. It’s highly configurable, so it’s recommended to play around with them to find a configuration that suits you well. Here are a few resources to help you improve your daily FreshRSS experience:
|
||||
|
||||
* [Organize your feeds in categories](04_Subscriptions.md#feed-management)
|
||||
* [Change the home page](05_Configuration.md#changing-the-view)
|
||||
|
|
|
@ -2,14 +2,14 @@ FreshRSS has three primary viewing modes: Normal, Global, and Reader view.
|
|||
|
||||
# Normal view
|
||||
|
||||
Normal view will allow you to view articles in a compressed view. They can be separated by category or individual feed, or viewed in the "main stream" containing all feeds. Clicking a feed in the sidebar (mobile users will need to click the folder icon to open it) will open that feed's view.
|
||||
Normal view will allow you to view articles in a compressed view. They can be separated by category or individual feed, or viewed in the "main stream" containing all feeds. Clicking a feed in the sidebar (mobile users will need to click the folder icon to open it) will open that feed’s view.
|
||||
|
||||
## Article List
|
||||
|
||||
By default, the normal view includes six items per article. From left to right:
|
||||
* **Read status:** An envelope icon to show if the article has been read or not. Closed envelopes are unread, open envelopes are read. Clicking on the icon will toggle the read status.
|
||||
* **Favourite status:** A star icon to show if the article has been favourited or not. Filled stars are favourited, empty stars are not. Clicking on the icon will toggle the favourite status.
|
||||
* **Feed name:** The name of the feed that the article is from. Clicking the feed name will move to that feed's view in normal view.
|
||||
* **Feed name:** The name of the feed that the article is from. Clicking the feed name will move to that feed’s view in normal view.
|
||||
* **Article title:** The title of the article. Clicking will open the article for viewing within FreshRSS.
|
||||
* **Article date/time:** The time the article was posted.
|
||||
* **Link to original article:** A globe icon that can be clicked to go to the article on the original website.
|
||||
|
@ -19,14 +19,14 @@ By default, the normal view includes six items per article. From left to right:
|
|||
Clicking the gear icon next to an individual feed will display additional options for that feed.
|
||||
* **Filter:** Run the defined filter to mark articles as read
|
||||
* **Statistics:** View statistics about the feed
|
||||
* **See website:** Open the feed's website in another tab
|
||||
* **See website:** Open the feed’s website in another tab
|
||||
* **Manage:** Configure the feed
|
||||
* **Actualize:** Force-update the feed
|
||||
* **Mark as read:** Mark all items in the feed as read
|
||||
|
||||
# Global view
|
||||
|
||||
Global view allows quick views of feed's statuses at once. Feeds and categories are shown with the number of unread articles next to them. Clicking a feed's name will open it in a view similar to normal view.
|
||||
Global view allows quick views of feed’s statuses at once. Feeds and categories are shown with the number of unread articles next to them. Clicking a feed’s name will open it in a view similar to normal view.
|
||||
|
||||
# Reader view
|
||||
|
||||
|
@ -111,7 +111,7 @@ You can also target a different user by adding their username to the query strin
|
|||
|
||||
### HTTP authentication
|
||||
|
||||
When using HTTP authentication, the syntax in the two previous sections is unusable. You'll need to provide your credentials to the scheduled task. **Note that this method is highly discouraged since it means that your credentials will be in plain sight!**
|
||||
When using HTTP authentication, the syntax in the two previous sections is unusable. You’ll need to provide your credentials to the scheduled task. **Note that this method is highly discouraged since it means that your credentials will be in plain sight!**
|
||||
|
||||
```cron
|
||||
0 * * * * curl -u alice:password123 'https://freshrss.example.net/i/?c=feed&a=actualize'
|
||||
|
@ -119,7 +119,7 @@ When using HTTP authentication, the syntax in the two previous sections is unusa
|
|||
|
||||
## Manual update
|
||||
|
||||
If you can't or don't want to use the automatic method, you can update manually. There are two methods for updating all or some of the feeds.
|
||||
If you can’t or don’t want to use the automatic method, you can update manually. There are two methods for updating all or some of the feeds.
|
||||
|
||||
### Complete update
|
||||
|
||||
|
@ -141,7 +141,7 @@ This update occurs on the selected feed only. To trigger it, simply click on the
|
|||
|
||||
## Purpose
|
||||
|
||||
When the number of articles stored by FreshRSS inevitably grows larger, it's important to use efficient filters to display only a subset of the articles. There are several methods that filter with different criteria. Usually those methods can be combined.
|
||||
When the number of articles stored by FreshRSS inevitably grows larger, it’s important to use efficient filters to display only a subset of the articles. There are several methods that filter with different criteria. Usually those methods can be combined.
|
||||
|
||||
## How-to filter
|
||||
|
||||
|
@ -167,7 +167,7 @@ There are several methods to filter articles by feed:
|
|||
|
||||
Each article has two attributes that can be combined. The first attribute indicates whether or not the article has been read. The second attribute indicates if the article was marked as favorite or not.
|
||||
|
||||
In version 0.7, attribute filters are available in the article display dropdown list. With this version, it's not possible to combine filters. For instance, it's not possible to display only read and favorite articles.
|
||||
In version 0.7, attribute filters are available in the article display dropdown list. With this version, it’s not possible to combine filters. For instance, it’s not possible to display only read and favorite articles.
|
||||
|
||||
![Attribute filters in 0.7](../img/users/status.filter.0.7.png)
|
||||
|
||||
|
@ -240,7 +240,7 @@ For example, you can enter multiple instances of `f:`, `author:`, `intitle:`, `i
|
|||
Combining several search criteria implies a logical *and*, but the keyword ` OR `
|
||||
can be used to combine several search criteria with a logical *or* instead: `author:Dupont OR author:Dupond`
|
||||
|
||||
When combining multiple negative operators (e.g. `!intitle:'thing1' AND !intitle:'thing2'`), you'll need to consider [De Morgan's laws](https://en.wikipedia.org/wiki/De_Morgan%27s_laws). See [this GitHub comment](https://github.com/FreshRSS/FreshRSS/issues/3236#issuecomment-891219460) for more details on the usage of `AND` vs `OR` when using combining multiple negative operators.
|
||||
When combining multiple negative operators (e.g. `!intitle:'thing1' AND !intitle:'thing2'`), you’ll need to consider [De Morgan’s laws](https://en.wikipedia.org/wiki/De_Morgan%27s_laws). See [this GitHub comment](https://github.com/FreshRSS/FreshRSS/issues/3236#issuecomment-891219460) for more details on the usage of `AND` vs `OR` when using combining multiple negative operators.
|
||||
|
||||
### By sorting by date
|
||||
|
||||
|
@ -261,7 +261,7 @@ Display the user queries drop-down by clicking the button next to the state butt
|
|||
|
||||
Then click on the bookmark action.
|
||||
|
||||
Congratulations, you're done!
|
||||
Congratulations, you’re done!
|
||||
|
||||
### Using a bookmarked query
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
|
||||
## Subscription management
|
||||
|
||||
The "Subscription management" submenu allows categories and feeds to be configured. Feeds can be moved between categories by drag-and-drop, or in the individual feed's settings. Hovering over a feed/category will cause a gear icon to appear. Clicking the icon will bring up the settings for that item.
|
||||
The "Subscription management" submenu allows categories and feeds to be configured. Feeds can be moved between categories by drag-and-drop, or in the individual feed’s settings. Hovering over a feed/category will cause a gear icon to appear. Clicking the icon will bring up the settings for that item.
|
||||
|
||||
## Category Settings
|
||||
|
||||
|
@ -33,15 +33,15 @@ This section will let you override the default settings for feed archiving and u
|
|||
|
||||
### Login
|
||||
|
||||
Some feeds require a username/password submitted over HTTP. These usually aren't needed for feeds.
|
||||
Some feeds require a username/password submitted over HTTP. These usually aren’t needed for feeds.
|
||||
|
||||
### Advanced
|
||||
|
||||
#### Retrieve a truncated feed from within FreshRSS
|
||||
|
||||
This question comes up regularly, so we'll try to clarify how one can retrieve a truncated RSS feed with FreshRSS. Please note that the process is absolutely not user friendly, but it works. :)
|
||||
This question comes up regularly, so we’ll try to clarify how one can retrieve a truncated RSS feed with FreshRSS. Please note that the process is absolutely not user friendly, but it works. :)
|
||||
|
||||
Please be aware that this way you'll generate much more traffic to the originating sites, and they might block you accordingly. FreshRSS performance is also negatively affected, because you'll have to fetch the full article content one by one. So it's a feature to use sparingly!
|
||||
Please be aware that this way you’ll generate much more traffic to the originating sites, and they might block you accordingly. FreshRSS performance is also negatively affected, because you’ll have to fetch the full article content one by one. So it’s a feature to use sparingly!
|
||||
|
||||
The "Article CSS selector on original website" corresponds to the "path" consisting of IDs and classes (which in HTML, matches the id and class attributes) to retrieve only the interesting part that corresponds to the article. Ideally, this path starts with an id (which is unique to the page). The basics are explained [here](https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Selectors).
|
||||
|
||||
|
@ -50,7 +50,7 @@ The "Article CSS selector on original website" corresponds to the "path" consis
|
|||
To find this path, you have to go to the address of one of the truncated articles.
|
||||
You look have to look for the "block" of HTML that corresponds to article content (in the source code!).
|
||||
|
||||
Here we find that the block that encompasses nothing but the content of the article is ```<div class="content clearfix">```. We'll only use the `.content` class here. Nevertheless, as said above, it's best to start the path with an id. If we go back to the parent block, we find ```<div id="article">``` and that's perfect! The path will be ```#article .content```.
|
||||
Here we find that the block that encompasses nothing but the content of the article is ```<div class="content clearfix">```. We’ll only use the `.content` class here. Nevertheless, as said above, it’s best to start the path with an id. If we go back to the parent block, we find ```<div id="article">``` and that’s perfect! The path will be ```#article .content```.
|
||||
|
||||
##### Add the corresponding classes to the article CSS path on the feed configuration page
|
||||
|
||||
|
@ -63,7 +63,7 @@ Examples:
|
|||
|
||||
##### Combining CSS Classes
|
||||
|
||||
Let's say we have an article which contains ads, and we do not want to have those ads retrieved by FreshRSS. Example HTML:
|
||||
Let’s say we have an article which contains ads, and we do not want to have those ads retrieved by FreshRSS. Example HTML:
|
||||
|
||||
```html
|
||||
<div id="article">
|
||||
|
@ -78,7 +78,7 @@ Let's say we have an article which contains ads, and we do not want to have thos
|
|||
</div>
|
||||
```
|
||||
|
||||
In this case it's possible to combine multiple CSS selectors with a comma: ```#article p.content, #article h2```
|
||||
In this case it’s possible to combine multiple CSS selectors with a comma: ```#article p.content, #article h2```
|
||||
|
||||
#### Retrieve a truncated feed with external tools
|
||||
|
||||
|
|
|
@ -4,16 +4,16 @@
|
|||
## Language
|
||||
|
||||
FreshRSS is currently available in 14 languages. After confirming your choice, the interface will be displayed in your preferred language.
|
||||
Depending on the language chosen, parts of the interface may not be not translated yet. If you're willing to help translate
|
||||
Depending on the language chosen, parts of the interface may not be not translated yet. If you’re willing to help translate
|
||||
the missing bits or would like to add a new language, please take a look at how you can [contribute to the project](../contributing.md#contribute-to-internationalization-i18n).
|
||||
|
||||
Some parts of FreshRSS aren't translated and aren't intended to be translated either. For now, this includes the logs visible in the application as well as the log generated by automatic update scripts.
|
||||
Some parts of FreshRSS aren’t translated and aren’t intended to be translated either. For now, this includes the logs visible in the application as well as the log generated by automatic update scripts.
|
||||
|
||||
Available languages are: cz, de, en, es, fr, he, it, ko, nl, oc, pt-br, ru, tr, zh-cn.
|
||||
|
||||
## Theme
|
||||
|
||||
There's no accounting for tastes, which is why FreshRSS offers eight official themes:
|
||||
There’s no accounting for tastes, which is why FreshRSS offers eight official themes:
|
||||
|
||||
* *Blue Lagoon* by **Mister aiR**
|
||||
* *Dark* by **AD**
|
||||
|
@ -24,13 +24,13 @@ There's no accounting for tastes, which is why FreshRSS offers eight official th
|
|||
* *Screwdriver* by **Mister aiR**
|
||||
* *Swage* by **Patrick Crandol**
|
||||
|
||||
If you can't find any themes you like, it's always possible to [create your own](../developers/04_Frontend/02_Design.md).
|
||||
If you can’t find any themes you like, it’s always possible to [create your own](../developers/04_Frontend/02_Design.md).
|
||||
|
||||
To select a theme, simply scroll through the themes and select one that strikes your fancy. After confirmation, the theme will be applied to the interface.
|
||||
|
||||
## Content width
|
||||
|
||||
Some people prefer short lines of text, while others prefer to maximize the available screen space. To satisfy the maximum number of people, it's possible to customize the width of the displayed content. There are four settings available:
|
||||
Some people prefer short lines of text, while others prefer to maximize the available screen space. To satisfy the maximum number of people, it’s possible to customize the width of the displayed content. There are four settings available:
|
||||
|
||||
* **Fine** displays content up to a maximum width of 550 pixels
|
||||
* **Medium** displays content up to a maximum width of 800 pixels
|
||||
|
@ -46,7 +46,7 @@ Please note that this section only affects normal view.
|
|||
Each article is rendered with a header (top line) and a footer (bottom line).
|
||||
In that section, you can choose what will be displayed in those.
|
||||
|
||||
If you disable every item in the top line, you'll still be able to see it since
|
||||
If you disable every item in the top line, you’ll still be able to see it since
|
||||
it contains the feed name and the article title. But if you do the same thing for
|
||||
the bottom line, it will be empty.
|
||||
|
||||
|
@ -62,7 +62,7 @@ By default, FreshRSS displays buttons to ease the article navigation when browsi
|
|||
|
||||
![navigation button configuration](../img/users/configuration.navigation.button.png)
|
||||
|
||||
If you don't use those buttons because you never browse on mobile or because you browse with gestures, you can disable them from the interface.
|
||||
If you don’t use those buttons because you never browse on mobile or because you browse with gestures, you can disable them from the interface.
|
||||
|
||||
# Reading
|
||||
|
||||
|
@ -82,11 +82,11 @@ This will set images to load as they are viewed. This can save data, but will ca
|
|||
|
||||
## Archiving
|
||||
|
||||
These are the global options for fetching and retaining articles from feeds. They can be overwridden by individual feed's settings.
|
||||
These are the global options for fetching and retaining articles from feeds. They can be overwridden by individual feed’s settings.
|
||||
|
||||
## Maintenance
|
||||
|
||||
This allows for purging/optimizing the current user's articles in the database.
|
||||
This allows for purging/optimizing the current user’s articles in the database.
|
||||
|
||||
# Sharing
|
||||
|
||||
|
@ -115,7 +115,7 @@ To remove an item from the list, follow those simple steps:
|
|||
To ease the use of the application, FreshRSS comes with a lot of predefined keyboard shortcuts.
|
||||
They allow actions to improve the user experience with a keyboard.
|
||||
|
||||
Of course, if you're not satisfied with the key mapping, you can change you configuration to fit your needs.
|
||||
Of course, if you’re not satisfied with the key mapping, you can change you configuration to fit your needs.
|
||||
|
||||
There are 4 types of shortcuts:
|
||||
|
||||
|
@ -124,13 +124,13 @@ There are 4 types of shortcuts:
|
|||
1. Article actions: they allow interactions with an article, like sharing or opening it on the original web-site.
|
||||
1. Other actions: they allow other interactions with the application, like opening the user queries menu or accessing the documentation.
|
||||
|
||||
It's worth noting that the share article action has two levels. Once you press the shortcut, a menu containing all the share options opens.
|
||||
To choose one share option, you need to select it by its number. When there is only one option, it's selected automatically though.
|
||||
It’s worth noting that the share article action has two levels. Once you press the shortcut, a menu containing all the share options opens.
|
||||
To choose one share option, you need to select it by its number. When there is only one option, it’s selected automatically though.
|
||||
|
||||
The same process applies to the user queries.
|
||||
|
||||
Be aware that there is no validation on the selected shortcuts.
|
||||
This means that if you assign a shortcut to more than one action, you'll end up with some unexpected behavior.
|
||||
This means that if you assign a shortcut to more than one action, you’ll end up with some unexpected behavior.
|
||||
|
||||
# User queries
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ We may not have answered all of your questions in the previous sections. The FAQ
|
|||
|
||||
## What is `/i` at the end of the application URL?
|
||||
|
||||
Of course, ```/i``` has a purpose! It's used for performance and usability:
|
||||
Of course, ```/i``` has a purpose! It’s used for performance and usability:
|
||||
|
||||
* It allows for serving icons, images, styles and scripts without cookies. Without that trick, those files would be downloaded more often, especially when form authentication is used. Also, HTTP requests would be heavier.
|
||||
* The ```./p/``` public root can be served without any HTTP access restrictions. Whereas it could be implemented in ```./p/i/```.
|
||||
|
@ -13,7 +13,7 @@ Of course, ```/i``` has a purpose! It's used for performance and usability:
|
|||
|
||||
To increase security, FreshRSS is hosted in two sections. The first section is public (the `./p` folder) and the second section is private (everything else). Therefore the `robots.txt` file is located in the `./p` sub-folder.
|
||||
|
||||
As explained in the [security section](../admins/09_AccessControl.html), it's highly recommended to make only the public section available at the domain level.
|
||||
As explained in the [security section](../admins/09_AccessControl.html), it’s highly recommended to make only the public section available at the domain level.
|
||||
With that configuration, `./p` is the root folder for <https://demo.freshrss.org/>, thus making `robots.txt` available at the root of the application.
|
||||
|
||||
The same principle applies to `favicon.ico` and `.htaccess`.
|
||||
|
@ -25,9 +25,9 @@ The feed syntax can be invalid, it can be unrecognized by the SimplePie library,
|
|||
The first step is to identify what causes the problem.
|
||||
Here are the steps to follow:
|
||||
|
||||
1. __Verify if the feed syntax is valid__ with the [W3C on-line tool](https://validator.w3.org/feed/ "RSS and Atom feed validator"). If it's not valid, there's nothing we can do.
|
||||
1. __Verify SimplePie validation__ with the [SimplePie on-line tool](https://simplepie.org/demo/ "SimplePie official demo"). If it's not recognized, there's nothing we can do.
|
||||
1. __Verify FreshRSS integration__ with the [demo](https://demo.freshrss.org "FreshRSS official demo"). If it's not working, you need to [create an issue on Github](https://github.com/FreshRSS/FreshRSS/issues/new "Create an issue for FreshRSS") so we can have a look at it. If it's working, there's probably something fishy with the hosting server.
|
||||
1. __Verify if the feed syntax is valid__ with the [W3C on-line tool](https://validator.w3.org/feed/ "RSS and Atom feed validator"). If it’s not valid, there’s nothing we can do.
|
||||
1. __Verify SimplePie validation__ with the [SimplePie on-line tool](https://simplepie.org/demo/ "SimplePie official demo"). If it’s not recognized, there’s nothing we can do.
|
||||
1. __Verify FreshRSS integration__ with the [demo](https://demo.freshrss.org "FreshRSS official demo"). If it’s not working, you need to [create an issue on Github](https://github.com/FreshRSS/FreshRSS/issues/new "Create an issue for FreshRSS") so we can have a look at it. If it’s working, there’s probably something fishy with the hosting server.
|
||||
|
||||
## How can you change a forgotten password?
|
||||
|
||||
|
@ -44,7 +44,7 @@ For more information on that matter, please refer to the [dedicated documentatio
|
|||
|
||||
## Permissions under SELinux
|
||||
|
||||
Some Linux distribution, like Fedora or RedHat Enterprise Linux, have SELinux enabled. This acts similar to a firewall application, so that applications can't write or modify files under certain conditions. While installing FreshRSS, step 2 can fail if the httpd process can't write to some data sub-directories. The following command should be executed as root to fix this problem:
|
||||
Some Linux distribution, like Fedora or RedHat Enterprise Linux, have SELinux enabled. This acts similar to a firewall application, so that applications can’t write or modify files under certain conditions. While installing FreshRSS, step 2 can fail if the httpd process can’t write to some data sub-directories. The following command should be executed as root to fix this problem:
|
||||
|
||||
```sh
|
||||
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/FreshRSS/data(/.*)?'
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
## Rejoignez-nous sur les listes de mailing
|
||||
|
||||
S'il vous manque des informations, n'hésitez pas à fouiller un peu la
|
||||
S’il vous manque des informations, n’hésitez pas à fouiller un peu la
|
||||
documentation ou venir nous poser directement vos questions sur [la mailing
|
||||
list des développeurs](https://freshrss.org/mailman/listinfo/dev).
|
||||
|
||||
* Le premier mailing est destiné à l'information générique, il doit être adapté aux utilisateurs.
|
||||
* Le premier mailing est destiné à l’information générique, il doit être adapté aux utilisateurs.
|
||||
[Rejoignez mailing@freshrss.org](https://freshrss.org/mailman/listinfo/mailing).
|
||||
* Le deuxième mailing s'adresse principalement aux développeurs.
|
||||
* Le deuxième mailing s’adresse principalement aux développeurs.
|
||||
[Rejoignez dev@freshrss.org](https://freshrss.org/mailman/listinfo/dev)
|
||||
|
||||
## Signaler un bug
|
||||
|
@ -15,23 +15,23 @@ Avez-vous trouvé un bogue ? Ne paniquez pas, voici quelques étapes pour le
|
|||
signaler facilement :
|
||||
|
||||
1. Cherche sur [le bug tracker](https://github.com/FreshRSS/FreshRSS/issues)
|
||||
(n'oubliez pas d'utiliser la barre de recherche).
|
||||
2. Si vous constatez un bogue similaire, n'hésitez pas à poster un
|
||||
commentaire pour ajouter de l'importance au ticket correspondant.
|
||||
3. Si vous ne l'avez pas trouvé,
|
||||
(n’oubliez pas d’utiliser la barre de recherche).
|
||||
2. Si vous constatez un bogue similaire, n’hésitez pas à poster un
|
||||
commentaire pour ajouter de l’importance au ticket correspondant.
|
||||
3. Si vous ne l’avez pas trouvé,
|
||||
[ouvrez un nouveau ticket](https://github.com/FreshRSS/FreshRSS/issues/new).
|
||||
|
||||
Si vous devez créer un nouveau ticket, essayez de garder les conseils
|
||||
suivants :
|
||||
|
||||
* Donnez un titre explicite au ticket pour le retrouver plus facilement plus tard.
|
||||
* Soyez aussi exhaustif que possible dans la description : qu'avez-vous fait ?
|
||||
* Soyez aussi exhaustif que possible dans la description : qu’avez-vous fait ?
|
||||
Quel est le bogue ? Quelles sont les étapes pour reproduire le bogue ?
|
||||
|
||||
Nous avons aussi besoin de quelques informations :
|
||||
|
||||
* Votre version de FreshRSS (sur la page A propos) ou le fichier `constants.php`)
|
||||
* Votre configuration de serveur : type d'hébergement, version PHP
|
||||
* Votre configuration de serveur : type d’hébergement, version PHP
|
||||
* Quelle base de données : SQLite, MySQL, MariaDB, PostgreSQL ? Quelle version ?
|
||||
* Si possible, les logs associés (logs PHP et logs FreshRSS sous `data/users/your_user/log.txt`)
|
||||
|
||||
|
@ -43,7 +43,7 @@ les collaborateurs, vous devrez suivre ces indications :
|
|||
1. Assurez-vous que le bogue est associé à un ticket et indiquez que vous allez travailler sur le bogue.
|
||||
2. [Fork du répertoire de projet](https://help.github.com/articles/fork-a-repo/).
|
||||
3. [Créez une nouvelle branche](https://help.github.com/articles/creating-and-deleting-branches-within-your-repository/).
|
||||
Le nom de la branche doit être clair, et idéalement préfixé par l'identifiant du ticket correspondant.
|
||||
Le nom de la branche doit être clair, et idéalement préfixé par l’identifiant du ticket correspondant.
|
||||
Par exemple, `783-contributing-file` pour réparer
|
||||
[ticket #783](https://github.com/FreshRSS/FreshRSS/issues/783).
|
||||
4. Ajoutez vos modifications à votre fork et
|
||||
|
@ -52,7 +52,7 @@ les collaborateurs, vous devrez suivre ces indications :
|
|||
Si vous devez écrire du code, veuillez suivre [nos recommandations de style
|
||||
de codage](developers/01_First_steps.md).
|
||||
|
||||
**Conseil :** si vous cherchez des bugs faciles à corriger, jetez un coup d'oeil à la vignette "[good first issue](https://github.com/FreshRSS/FreshRSS/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22)".
|
||||
**Conseil :** si vous cherchez des bugs faciles à corriger, jetez un coup d’oeil à la vignette « [good first issue](https://github.com/FreshRSS/FreshRSS/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) ».
|
||||
|
||||
## Soumettre une idée
|
||||
|
||||
|
@ -61,17 +61,17 @@ ticket](https://github.com/FreshRSS/FreshRSS/issues/new) sur notre tracker
|
|||
bogue pour nous demander si nous pouvons le mettre en œuvre. Les plus
|
||||
grandes idées viennent souvent des suggestions les plus timides !
|
||||
|
||||
Si votre idée est bonne, nous y jetterons un coup d'oeil.
|
||||
Si votre idée est bonne, nous y jetterons un coup d’oeil.
|
||||
|
||||
## Contribuer à l'internationalisation (i18n)
|
||||
## Contribuer à l’internationalisation (i18n)
|
||||
|
||||
Si vous voulez améliorer l'internationalisation, ouvrez d'abord un nouveau
|
||||
Si vous voulez améliorer l’internationalisation, ouvrez d’abord un nouveau
|
||||
ticket et suivez les conseils de la section *Fixer un bogue*.
|
||||
|
||||
Les traductions sont disponibles dans les sous-répertoires de `./app/i18n/`.
|
||||
|
||||
Nous travaillons sur une meilleure façon de gérer l'internationalisation
|
||||
mais n'hésitez pas à nous suggérer des idées !
|
||||
Nous travaillons sur une meilleure façon de gérer l’internationalisation
|
||||
mais n’hésitez pas à nous suggérer des idées !
|
||||
|
||||
## Contribuer à la documentation
|
||||
|
||||
|
|
|
@ -3,38 +3,38 @@
|
|||
## Configurer son environnement (Docker)
|
||||
|
||||
FreshRSS est construit en PHP et utilise le framework Minz. Les
|
||||
dépendancessont directement incluses dans le code source, donc vous n'avez
|
||||
pas besoin d'utiliser Composer.
|
||||
dépendancessont directement incluses dans le code source, donc vous n’avez
|
||||
pas besoin d’utiliser Composer.
|
||||
|
||||
Il existe plusieurs façons de configurer votre environnement
|
||||
dedéveloppement. La méthode la plus simple et la plus supportée est basée
|
||||
surDocker. C'est la solution qui est documentée ci-dessous. Si vous avez
|
||||
déjà unenvironnement PHP fonctionnel, vous n'en avez probablement pas
|
||||
surDocker. C’est la solution qui est documentée ci-dessous. Si vous avez
|
||||
déjà unenvironnement PHP fonctionnel, vous n’en avez probablement pas
|
||||
besoin.
|
||||
|
||||
Nous supposons ici que vous utilisez une distribution GNU/Linux, capable
|
||||
d'exécuter Docker. Sinon, vous devrez adapter les commandes en conséquence.
|
||||
d’exécuter Docker. Sinon, vous devrez adapter les commandes en conséquence.
|
||||
|
||||
Les commandes qui suivent doivent être exécutées dans une console. Ils
|
||||
commencent par `$` quand les commandes doivent être exécutées en tant
|
||||
qu'utilisateur normal, et par `#` quand elles doivent être exécutées en tant
|
||||
qu'utilisateur root. Vous n'avez pas besoin de taper ces caractères. Un
|
||||
chemin d'accès peut être indiqué devant ces caractères pour vous aider à
|
||||
qu’utilisateur normal, et par `#` quand elles doivent être exécutées en tant
|
||||
qu’utilisateur root. Vous n’avez pas besoin de taper ces caractères. Un
|
||||
chemin d’accès peut être indiqué devant ces caractères pour vous aider à
|
||||
identifier où ils doivent être exécutés. Par exemple, `app$ echo 'Hello
|
||||
World'` indique que vous devez exécuter la commande `echo` dans le
|
||||
répertoire `app/`.
|
||||
|
||||
Tout d'abord, vous devez installer
|
||||
Tout d’abord, vous devez installer
|
||||
[Docker](https://docs.docker.com/install/linux/docker-ce/ubuntu/).
|
||||
|
||||
Une fois que c'est fait, clonez le dépôt de code de la manière suivante :
|
||||
Une fois que c’est fait, clonez le dépôt de code de la manière suivante :
|
||||
|
||||
```sh
|
||||
git clone https://github.com/FreshRSS/FreshRSS.git
|
||||
cd FreshRSS
|
||||
```
|
||||
|
||||
Notez que, pour contribuer, vous devrez d'abord « forker » ce dépôt de code
|
||||
Notez que, pour contribuer, vous devrez d’abord « forker » ce dépôt de code
|
||||
(ou dépôt de code référent) et cloner votre « fork » à la place de ce
|
||||
dépôt. Adaptez les commandes en conséquence.
|
||||
|
||||
|
@ -44,12 +44,12 @@ Ensuite, la seule commande que vous devez connaître est la suivante :
|
|||
make start
|
||||
```
|
||||
|
||||
Cela peut prendre un certain temps pour que Docker télécharge l'image
|
||||
Cela peut prendre un certain temps pour que Docker télécharge l’image
|
||||
utilisée. Dans le cas où la commande échoue pour un problème de droit, il
|
||||
faudra soit ajouter votre utilisateur au groupe `docker`, soit relancer la
|
||||
commande en la préfixant par `sudo`.
|
||||
|
||||
**Vous pouvez maintenant accéder à FreshRSS à [http://localhost:8080](http://localhost:8080).** Suivez simplement le processus d'installation et sélectionnez la base de données SQLite.
|
||||
**Vous pouvez maintenant accéder à FreshRSS à [http://localhost:8080](http://localhost:8080).** Suivez simplement le processus d’installation et sélectionnez la base de données SQLite.
|
||||
|
||||
Vous pouvez arrêter les conteneurs en tapant <kbd>Control</kbd> + <kbd>c</kbd> ou avec la commande suivante, dans un autre terminal:
|
||||
|
||||
|
@ -60,9 +60,9 @@ make stop
|
|||
Si la configuration vous intéresse, les commandes `make' sont définies dans
|
||||
le fichier [`Makefile`](/Makefile).
|
||||
|
||||
Si vous avez besoin d'utiliser une image Docker identifiée par un tag
|
||||
Si vous avez besoin d’utiliser une image Docker identifiée par un tag
|
||||
différent (par défaut `alpine`), vous pouvez surcharger de la manière
|
||||
suivante la variable d'environnement `TAG` au moment de l'exécution de la
|
||||
suivante la variable d’environnement `TAG` au moment de l’exécution de la
|
||||
commande :
|
||||
|
||||
```sh
|
||||
|
@ -72,7 +72,7 @@ TAG=arm make start
|
|||
Vous pouvez trouver la liste complète des tags disponibles [sur le hub
|
||||
Docker](https://hub.docker.com/r/freshrss/freshrss/tags).
|
||||
|
||||
Si vous voulez construire l'image Docker, vous pouvez lancer la commande
|
||||
Si vous voulez construire l’image Docker, vous pouvez lancer la commande
|
||||
suivante :
|
||||
|
||||
```sh
|
||||
|
@ -81,7 +81,7 @@ make build
|
|||
TAG=arm make build
|
||||
```
|
||||
|
||||
La valeur de la variable `TAG` peut contenir n'importe quelle valeur (par
|
||||
La valeur de la variable `TAG` peut contenir n’importe quelle valeur (par
|
||||
exemple `local`). Vous pouvez cibler une architecture spécifique en ajoutant
|
||||
`-alpine` ou `-arm` à la fin du tag (par exemple `local-arm`).
|
||||
|
||||
|
@ -92,13 +92,13 @@ exemple `local`). Vous pouvez cibler une architecture spécifique en ajoutant
|
|||
## Extensions
|
||||
|
||||
Si vous souhaitez créer votre propre extension FreshRSS, consultez la
|
||||
[documentation de l'extension](03_Backend/05_Extensions.md).
|
||||
[documentation de l’extension](03_Backend/05_Extensions.md).
|
||||
|
||||
## Style de codage
|
||||
|
||||
Si vous désirez contribuer au code, il est important de respecter le style
|
||||
de codage suivant. Le code actuel ne le respecte pas entièrement mais il est
|
||||
de notre devoir à tous de le changer dès que l'occasion se présente.
|
||||
de notre devoir à tous de le changer dès que l’occasion se présente.
|
||||
|
||||
Aucune nouvelle contribution ne respectant pas ces règles ne sera acceptée
|
||||
tant que les corrections nécessaires ne sont pas appliquées.
|
||||
|
@ -107,11 +107,11 @@ tant que les corrections nécessaires ne sont pas appliquées.
|
|||
|
||||
#### Indentation
|
||||
|
||||
L'indentation du code doit être faite impérativement avec des tabulations.
|
||||
L’indentation du code doit être faite impérativement avec des tabulations.
|
||||
|
||||
#### Alignement
|
||||
|
||||
Une fois l'indentation faite, il peut être nécessaire de faire un alignement
|
||||
Une fois l’indentation faite, il peut être nécessaire de faire un alignement
|
||||
pour simplifier la lecture. Dans ce cas, il faut utiliser les espaces.
|
||||
|
||||
```php
|
||||
|
@ -129,9 +129,9 @@ Il est possible de vérifier la présence de caractères blancs en fin de ligne
|
|||
grâce à Git avec la commande suivante :
|
||||
|
||||
```sh
|
||||
# commande à lancer avant l'ajout des fichiers dans l'index
|
||||
# commande à lancer avant l’ajout des fichiers dans l’index
|
||||
git diff --check
|
||||
# commande à lancer après l'ajout des fichiers dans l'index mais avant le commit
|
||||
# commande à lancer après l’ajout des fichiers dans l’index mais avant le commit
|
||||
git diff --check --cached
|
||||
```
|
||||
|
||||
|
@ -141,11 +141,11 @@ Chaque fichier doit se terminer par une ligne vide.
|
|||
|
||||
#### Le cas de la virgule, du point et du point-virgule
|
||||
|
||||
Il n'y a pas d'espace avant ces caractères, il y en a un après.
|
||||
Il n’y a pas d’espace avant ces caractères, il y en a un après.
|
||||
|
||||
#### Le cas des opérateurs
|
||||
|
||||
Chaque opérateur est entouré d'espaces.
|
||||
Chaque opérateur est entouré d’espaces.
|
||||
|
||||
```php
|
||||
if ($a == 10) {
|
||||
|
@ -157,9 +157,9 @@ echo $a ? 1 : 0;
|
|||
|
||||
#### Le cas des parenthèses
|
||||
|
||||
Il n'y a pas d'espaces entre des parenthèses. Il n'y a pas d'espaces avant
|
||||
une parenthèse ouvrante sauf si elle est précédée d'un mot-clé. Il n'y a pas
|
||||
d'espaces après une parenthèse fermante sauf si elle est suivie d'une
|
||||
Il n’y a pas d’espaces entre des parenthèses. Il n’y a pas d’espaces avant
|
||||
une parenthèse ouvrante sauf si elle est précédée d’un mot-clé. Il n’y a pas
|
||||
d’espaces après une parenthèse fermante sauf si elle est suivie d’une
|
||||
accolade ouvrante.
|
||||
|
||||
```php
|
||||
|
@ -177,7 +177,7 @@ if ((int)$a == 10) {
|
|||
Ce cas se présente le plus souvent en Javascript. Quand on a des fonctions
|
||||
chainées, des fonctions anonymes ainsi que des fonctions de rappels, il est
|
||||
très facile de se perdre. Dans ce cas là, on ajoute une indentation
|
||||
supplémentaire pour toute l'instruction et on revient au même niveau pour
|
||||
supplémentaire pour toute l’instruction et on revient au même niveau pour
|
||||
une instruction de même niveau.
|
||||
|
||||
```javascript
|
||||
|
@ -198,7 +198,7 @@ shortcut.add("shift+" + shortcuts.mark_read, function () {
|
|||
### Longueur des lignes
|
||||
|
||||
Les lignes ne doivent pas dépasser 80 caractères. Il est cependant autorisé
|
||||
exceptionnellement de dépasser cette limite s'il n'est pas possible de la
|
||||
exceptionnellement de dépasser cette limite s’il n’est pas possible de la
|
||||
respecter mais en aucun cas, les lignes ne doivent dépasser les 100
|
||||
caractères.
|
||||
|
||||
|
@ -214,7 +214,7 @@ function ma_fonction($param_1, $param_2,
|
|||
|
||||
### Nommage
|
||||
|
||||
L'ensemble des éléments du code (fonctions, classes, méthodes et variables)
|
||||
L’ensemble des éléments du code (fonctions, classes, méthodes et variables)
|
||||
doivent être nommés de manière à décrire leur usage de façon concise.
|
||||
|
||||
#### Fonctions et variables
|
||||
|
@ -278,8 +278,8 @@ fermante.
|
|||
|
||||
#### Tableaux
|
||||
|
||||
Lors de l'écriture de tableaux sur plusieurs lignes, tous les éléments
|
||||
doivent être suivis d'une virgule (même le dernier).
|
||||
Lors de l’écriture de tableaux sur plusieurs lignes, tous les éléments
|
||||
doivent être suivis d’une virgule (même le dernier).
|
||||
|
||||
```php
|
||||
$variable = [
|
||||
|
|
|
@ -3,12 +3,12 @@
|
|||
Malgré le soin apporté à FreshRSS, il se peut que des bugs apparaissent
|
||||
encore. Le projet est jeune et le développement dynamique, aussi celui-ci
|
||||
pourra être corrigé rapidement. Il se peut aussi que vous ayez en tête une
|
||||
fonctionnalité qui n'existe pas encore. Que celle-ci vous paraisse idiote,
|
||||
fonctionnalité qui n’existe pas encore. Que celle-ci vous paraisse idiote,
|
||||
farfelue, inutile ou trop spécifique, il ne faut surtout pas hésiter à nous
|
||||
la proposer ! Très souvent des "idées en l'air" ont trouvé une oreille
|
||||
la proposer ! Très souvent des « idées en l’air » ont trouvé une oreille
|
||||
attentive. Ce sont les regards externes qui font le plus évoluer le projet.
|
||||
|
||||
Si vous êtes convaincus qu'il faut vous faire entendre, voici la marche à
|
||||
Si vous êtes convaincus qu’il faut vous faire entendre, voici la marche à
|
||||
suivre.
|
||||
|
||||
## Sur GitHub
|
||||
|
@ -16,25 +16,25 @@ suivre.
|
|||
GitHub est la plate-forme à privilégier pour vos demandes. En effet, cela
|
||||
nous permet de pouvoir discuter à plusieurs sur un problème ou une
|
||||
suggestion et de faire émerger, souvent, des idées nouvelles. Ne négligeons
|
||||
pas cet aspect "social" !
|
||||
pas cet aspect « social » !
|
||||
|
||||
1. [Rendez-vous sur le gestionnaire de tickets de
|
||||
bugs](https://github.com/FreshRSS/FreshRSS/issues)
|
||||
2. Commencez par rechercher si une demande similaire n'a pas déjà été
|
||||
faite. Si oui, n'hésitez pas à ajouter votre voix à la demande.
|
||||
2. Commencez par rechercher si une demande similaire n’a pas déjà été
|
||||
faite. Si oui, n’hésitez pas à ajouter votre voix à la demande.
|
||||
3. Si votre demande est nouvelle, [ouvrez un nouveau ticket de
|
||||
bug](https://github.com/FreshRSS/FreshRSS/issues/new)
|
||||
4. Rédigez enfin votre demande. Si vous maitrisez l'anglais, c'est la
|
||||
langue à privilégier car cela permet d'ouvrir la discussion à un plus
|
||||
grand nombre de personnes. Sinon, ce n'est pas grave, continuez en
|
||||
4. Rédigez enfin votre demande. Si vous maitrisez l’anglais, c’est la
|
||||
langue à privilégier car cela permet d’ouvrir la discussion à un plus
|
||||
grand nombre de personnes. Sinon, ce n’est pas grave, continuez en
|
||||
français :)
|
||||
5. Merci de bien vouloir suivre les quelques conseils donnés plus bas pour
|
||||
faciliter la prise en compte de votre ticket.
|
||||
|
||||
## De façon informelle
|
||||
|
||||
Tout le monde n'aime pas ou n'utilise pas GitHub pour des raisons aussi
|
||||
diverses que légitimes. C'est pourquoi vous pouvez aussi nous contacter de
|
||||
Tout le monde n’aime pas ou n’utilise pas GitHub pour des raisons aussi
|
||||
diverses que légitimes. C’est pourquoi vous pouvez aussi nous contacter de
|
||||
façon plus informelle.
|
||||
|
||||
* Sur [notre chat
|
||||
|
@ -42,7 +42,7 @@ façon plus informelle.
|
|||
* Sur [les listes de
|
||||
diffusion](https://freshrss.org/announce-of-the-mailing-lists.html)
|
||||
* À des évènements / rencontres autour du Logiciel Libre
|
||||
* Autour d'une bière dans un bar
|
||||
* Autour d’une bière dans un bar
|
||||
* Etc.
|
||||
|
||||
## Conseils
|
||||
|
@ -51,19 +51,19 @@ Voici quelques conseils pour bien présenter votre remontée de bug ou votre
|
|||
suggestion :
|
||||
|
||||
|
||||
* **Faites attention à l'orthographe.** même si ce n'est pas toujours
|
||||
* **Faites attention à l’orthographe.** même si ce n’est pas toujours
|
||||
facile, faites votre maximum. ;)
|
||||
* **Donnez un titre explicite à votre demande**, quitte à ce qu'il soit un
|
||||
* **Donnez un titre explicite à votre demande**, quitte à ce qu’il soit un
|
||||
peu long. Cela nous aide non seulement à comprendre votre demande, mais
|
||||
aussi à retrouver votre ticket plus tard.
|
||||
* **Une demande = un ticket.** Vous pouvez avoir des tas d'idées mais vous
|
||||
* **Une demande = un ticket.** Vous pouvez avoir des tas d’idées mais vous
|
||||
avez peur de spammer le gestionnaire de bugs : ça ne fait rien. Il vaut
|
||||
mieux avoir un peu trop de tickets que trop de demandes dans un seul. On
|
||||
s'occupera de fermer et regrouper les demandes qui le peuvent.
|
||||
s’occupera de fermer et regrouper les demandes qui le peuvent.
|
||||
* Si vous remontez un bug, pensez à nous **fournir les logs de FreshRSS**
|
||||
(accessibles dans les dossier ''data/log/'' de FreshRSS) **et PHP**
|
||||
(l'emplacement peut varier selon les distributions, mais pensez à chercher
|
||||
dans ''/var/log/httpd'' ou ''/var/log/apache'').
|
||||
(accessibles dans les dossier `data/log/` de FreshRSS) **et PHP**
|
||||
(l’emplacement peut varier selon les distributions, mais pensez à chercher
|
||||
dans `/var/log/httpd` ou `/var/log/apache`).
|
||||
* Si vous ne trouvez pas les fichiers de logs, précisez-le dans votre ticket
|
||||
afin que nous sachions que vous avez déjà cherché.
|
||||
* Tous les bugs ne nécessitent pas les logs, mais si vous doutez, mieux vaut
|
||||
|
@ -86,12 +86,12 @@ le bug.
|
|||
|
||||
### Quels résultats ai-je obtenus ?
|
||||
|
||||
Le bug : ce que vous voyez qui n'aurez pas dû se passer. Ici vous pouvez
|
||||
Le bug : ce que vous voyez qui n’aurez pas dû se passer. Ici vous pouvez
|
||||
fournir les logs.
|
||||
|
||||
### Quel était le résultat attendu ?
|
||||
|
||||
Afin que nous comprenions bien où est le problème... au moins selon vous :p
|
||||
Afin que nous comprenions bien où est le problème… au moins selon vous :p
|
||||
|
||||
### Quelle est ma situation ?
|
||||
|
||||
|
@ -151,7 +151,7 @@ git checkout -b mon-branch-developpement
|
|||
git add app/actualize_script.php
|
||||
# Commitez le changement et écrivez un message de commit approprié.
|
||||
git commit
|
||||
# Vérifiez deux fois que tout a l'air d'aller bien
|
||||
# Vérifiez deux fois que tout a l’air d’aller bien
|
||||
git show
|
||||
# Poussez les changements sur ton fork
|
||||
git push
|
||||
|
@ -169,5 +169,5 @@ première ligne. Par exemple :
|
|||
Si nécessaire, une ligne blanche et une explication plus longue peuvent le
|
||||
suivre.
|
||||
|
||||
Pour d'autres conseils, voir
|
||||
Pour d’autres conseils, voir
|
||||
[ici](https://chris.beams.io/posts/git-commit/).
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
> **À FAIRE**
|
||||
|
||||
## Gestion de l'authentification
|
||||
## Gestion de l’authentification
|
||||
|
||||
> **À FAIRE**
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
# Écriture d'extensions pour FreshRSS
|
||||
# Écriture d’extensions pour FreshRSS
|
||||
|
||||
## Présentation de FreshRSS
|
||||
|
||||
FreshRSS est un agrégateur de flux RSS / Atom écrit en PHP depuis octobre
|
||||
2012. Le site officiel est situé à l'adresse
|
||||
2012. Le site officiel est situé à l’adresse
|
||||
[freshrss.org](https://freshrss.org) et son dépot Git est hébergé par Github
|
||||
: [github.com/FreshRSS/FreshRSS](https://github.com/FreshRSS/FreshRSS).
|
||||
|
||||
|
@ -13,25 +13,25 @@ FreshRSS est limité dans ses possibilités techniques par différents facteurs
|
|||
:
|
||||
|
||||
* La disponibilité des développeurs principaux ;
|
||||
* La volonté d'intégrer certains changements ;
|
||||
* La volonté d’intégrer certains changements ;
|
||||
* Le niveau de « hack » nécessaire pour intégrer des fonctionnalités à la marge.
|
||||
|
||||
Si la première limitation peut, en théorie, être levée par la participation
|
||||
de nouveaux contributeurs au projet, elle est en réalité conditionnée par la
|
||||
volonté des contributeurs à s'intéresser au code source du projet en
|
||||
volonté des contributeurs à s’intéresser au code source du projet en
|
||||
entier. Afin de lever les deux autres limitations quant à elles, il faudra
|
||||
la plupart du temps passer par un « à-coté » souvent synonyme de « fork ».
|
||||
|
||||
Une autre solution consiste à passer par un système d'extensions. En
|
||||
permettant à des utilisateurs d'écrire leur propre extension sans avoir à
|
||||
s'intéresser au cœur même du logiciel de base, on permet :
|
||||
Une autre solution consiste à passer par un système d’extensions. En
|
||||
permettant à des utilisateurs d’écrire leur propre extension sans avoir à
|
||||
s’intéresser au cœur même du logiciel de base, on permet :
|
||||
|
||||
1. De réduire la quantité de code source à assimiler pour un nouveau contributeur ;
|
||||
2. De permettre d'intégrer des nouveautés de façon non-officielles ;
|
||||
3. De se passer des développeurs principaux pour d'éventuelles améliorations
|
||||
2. De permettre d’intégrer des nouveautés de façon non-officielles ;
|
||||
3. De se passer des développeurs principaux pour d’éventuelles améliorations
|
||||
sans passer par la case « fork ».
|
||||
|
||||
Note : il est tout à fait imaginable que les fonctionnalités d'une extension
|
||||
Note : il est tout à fait imaginable que les fonctionnalités d’une extension
|
||||
puissent par la suite être intégrées dans le code initial de FreshRSS de
|
||||
façon officielle. Cela permet de proposer un « proof of concept » assez
|
||||
facilement.
|
||||
|
@ -42,45 +42,45 @@ facilement.
|
|||
|
||||
Cette fiche technique devrait renvoyer vers la documentation officielle de
|
||||
FreshRSS et de Minz (le framework PHP sur lequel repose
|
||||
FreshRSS). Malheureusement cette documentation n'existe pas encore. Voici
|
||||
donc en quelques mots les principaux éléments à connaître. Il n'est pas
|
||||
nécessaire de lire l'ensemble des chapitres de cette section si vous n'avez
|
||||
pas à utiliser une fonctionnalité dans votre extension (si vous n'avez pas
|
||||
besoin de traduire votre extension, pas besoin d'en savoir plus sur le
|
||||
FreshRSS). Malheureusement cette documentation n’existe pas encore. Voici
|
||||
donc en quelques mots les principaux éléments à connaître. Il n’est pas
|
||||
nécessaire de lire l’ensemble des chapitres de cette section si vous n’avez
|
||||
pas à utiliser une fonctionnalité dans votre extension (si vous n’avez pas
|
||||
besoin de traduire votre extension, pas besoin d’en savoir plus sur le
|
||||
module `Minz_Translate` par exemple).
|
||||
|
||||
### Architecture MVC
|
||||
|
||||
Minz repose et impose une architecture MVC pour les projets l'utilisant. On
|
||||
Minz repose et impose une architecture MVC pour les projets l’utilisant. On
|
||||
distingue dans cette architecture trois composants principaux :
|
||||
|
||||
* Le Modèle : c'est l'objet de base que l'on va manipuler. Dans FreshRSS,
|
||||
* Le Modèle : c’est l’objet de base que l’on va manipuler. Dans FreshRSS,
|
||||
les catégories, les flux et les articles sont des modèles. La partie du
|
||||
code qui permet de les manipuler en base de données fait aussi partie du
|
||||
modèle mais est séparée du modèle de base : on parle de DAO (pour « Data
|
||||
Access Object »). Les modèles sont stockés dans un répertoire `Models`.
|
||||
* La Vue : c'est ce qui représente ce que verra l'utilisateur. La vue est
|
||||
donc simplement du code HTML que l'on mixe avec du PHP pour afficher les
|
||||
* La Vue : c’est ce qui représente ce que verra l’utilisateur. La vue est
|
||||
donc simplement du code HTML que l’on mixe avec du PHP pour afficher les
|
||||
informations dynamiques. Les vues sont stockées dans un répertoire
|
||||
`views`.
|
||||
* Le Contrôleur : c'est ce qui permet de lier modèles et vues entre
|
||||
* Le Contrôleur : c’est ce qui permet de lier modèles et vues entre
|
||||
eux. Typiquement, un contrôleur va charger des modèles à partir de la base
|
||||
de données (une liste d'articles par exemple) pour les « passer » à une
|
||||
vue afin qu'elle les affiche. Les contrôleurs sont stockés dans un
|
||||
de données (une liste d’articles par exemple) pour les « passer » à une
|
||||
vue afin qu’elle les affiche. Les contrôleurs sont stockés dans un
|
||||
répertoire `Controllers`.
|
||||
|
||||
### Routage
|
||||
|
||||
Afin de lier une URL à un contrôleur, on doit passer par une phase dite de «
|
||||
routage ». Dans FreshRSS, cela est particulièrement simple car il suffit
|
||||
d'indiquer le nom du contrôleur à charger dans l'URL à l'aide d'un paramètre `c`.
|
||||
Par exemple, l'adresse <http://exemple.com?c=hello> va exécuter le code
|
||||
d’indiquer le nom du contrôleur à charger dans l’URL à l’aide d’un paramètre `c`.
|
||||
Par exemple, l’adresse <http://exemple.com?c=hello> va exécuter le code
|
||||
contenu dans le contrôleur `hello`.
|
||||
|
||||
Une notion qui n'a pas encore été évoquée est le système d'« actions ». Une
|
||||
Une notion qui n’a pas encore été évoquée est le système d'« actions ». Une
|
||||
action est exécutée *sur* un contrôleur. Concrètement, un contrôleur va être
|
||||
représenté par une classe et ses actions par des méthodes. Pour exécuter une
|
||||
action, il est nécessaire d'indiquer un paramètre `a` dans l'URL.
|
||||
action, il est nécessaire d’indiquer un paramètre `a` dans l’URL.
|
||||
|
||||
Exemple de code :
|
||||
|
||||
|
@ -100,12 +100,12 @@ class FreshRSS_hello_Controller extends FreshRSS_ActionController {
|
|||
?>
|
||||
```
|
||||
|
||||
Si l'on charge l'adresse <http://exemple.com?c=hello&a=world>, l'action
|
||||
Si l’on charge l’adresse <http://exemple.com?c=hello&a=world>, l’action
|
||||
`world` va donc être exécutée sur le contrôleur `hello`.
|
||||
|
||||
Note : si `c` ou `a` n'est pas précisée, la valeur par défaut de chacune de
|
||||
ces variables est `index`. Ainsi l'adresse <http://exemple.com?c=hello> va
|
||||
exécuter l'action `index` du contrôleur `hello`.
|
||||
Note : si `c` ou `a` n’est pas précisée, la valeur par défaut de chacune de
|
||||
ces variables est `index`. Ainsi l’adresse <http://exemple.com?c=hello> va
|
||||
exécuter l’action `index` du contrôleur `hello`.
|
||||
|
||||
Plus loin, sera utilisée la convention `hello/world` pour évoquer un couple
|
||||
contrôleur/action.
|
||||
|
@ -131,7 +131,7 @@ La variable `$this->a_variable` a été passée précédemment par le contrôleu
|
|||
|
||||
Il est souvent nécessaire de profiter des paramètres passés par GET ou par
|
||||
POST. Dans Minz, ces paramètres sont accessibles de façon indistincts à
|
||||
l'aide de la classe `Minz_Request`. Exemple de code :
|
||||
l’aide de la classe `Minz_Request`. Exemple de code :
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
@ -140,7 +140,7 @@ $default_value = 'foo';
|
|||
$param = Minz_Request::param('bar', $default_value);
|
||||
|
||||
// Affichera la valeur du paramètre `bar` (passé via GET ou POST)
|
||||
// ou "foo" si le paramètre n'existe pas.
|
||||
// ou "foo" si le paramètre n’existe pas.
|
||||
echo $param;
|
||||
|
||||
// Force la valeur du paramètre `bar`
|
||||
|
@ -153,25 +153,25 @@ echo Minz_Request::param('bar');
|
|||
?>
|
||||
```
|
||||
|
||||
La méthode `Minz_Request::isPost()` peut être utile pour n'exécuter un
|
||||
morceau de code que s'il s'agit d'une requête POST.
|
||||
La méthode `Minz_Request::isPost()` peut être utile pour n’exécuter un
|
||||
morceau de code que s’il s’agit d’une requête POST.
|
||||
|
||||
Note : il est préférable de n'utiliser `Minz_Request` que dans les
|
||||
Note : il est préférable de n’utiliser `Minz_Request` que dans les
|
||||
contrôleurs. Il est probable que vous rencontriez cette méthode dans les
|
||||
vues de FreshRSS, voire dans les modèles, mais sachez qu'il ne s'agit
|
||||
**pas** d'une bonne pratique.
|
||||
vues de FreshRSS, voire dans les modèles, mais sachez qu’il ne s’agit
|
||||
**pas** d’une bonne pratique.
|
||||
|
||||
### Accéder aux paramètres de session
|
||||
|
||||
L'accès aux paramètres de session est étrangement similaire aux paramètres
|
||||
GET / POST mais passe par la classe `Minz_Session` cette fois-ci ! Il n'y a
|
||||
pas d'exemple ici car vous pouvez reprendre le précédent en changeant tous
|
||||
L’accès aux paramètres de session est étrangement similaire aux paramètres
|
||||
GET / POST mais passe par la classe `Minz_Session` cette fois-ci ! Il n’y a
|
||||
pas d’exemple ici car vous pouvez reprendre le précédent en changeant tous
|
||||
les `Minz_Request` par des `Minz_Session`.
|
||||
|
||||
### Gestion des URL
|
||||
|
||||
Pour profiter pleinement du système de routage de Minz, il est fortement
|
||||
déconseillé d'écrire les URL en dur dans votre code. Par exemple, la vue
|
||||
déconseillé d’écrire les URL en dur dans votre code. Par exemple, la vue
|
||||
suivante doit être évitée :
|
||||
|
||||
```html
|
||||
|
@ -180,11 +180,11 @@ suivante doit être évitée :
|
|||
</p>
|
||||
```
|
||||
|
||||
Si un jour il est décidé d'utiliser un système d'« url rewriting » pour
|
||||
Si un jour il est décidé d’utiliser un système d'« url rewriting » pour
|
||||
avoir des adresses au format <http://exemple.com/controller/action>, toutes
|
||||
les adresses précédentes deviendraient ineffectives !
|
||||
|
||||
Préférez donc l'utilisation de la classe `Minz_Url` et de sa méthode
|
||||
Préférez donc l’utilisation de la classe `Minz_Url` et de sa méthode
|
||||
`display()`. `Minz_Url::display()` prend en paramètre un tableau de la forme
|
||||
suivante :
|
||||
|
||||
|
@ -206,7 +206,7 @@ echo Minz_Url::display($url_array);
|
|||
```
|
||||
|
||||
Comme cela peut devenir un peu pénible à utiliser à la longue, surtout dans
|
||||
les vues, il est préférable d'utiliser le raccourci `_url()` :
|
||||
les vues, il est préférable d’utiliser le raccourci `_url()` :
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
@ -224,8 +224,8 @@ utilisée dans les contrôleurs.
|
|||
### Redirections
|
||||
|
||||
Il est souvent nécessaire de rediriger un utilisateur vers une autre
|
||||
page. Pour cela, la classe `Minz_Request` dispose d'une autre méthode utile
|
||||
: `forward()`. Cette méthode prend en argument le même format d'URL que
|
||||
page. Pour cela, la classe `Minz_Request` dispose d’une autre méthode utile
|
||||
: `forward()`. Cette méthode prend en argument le même format d’URL que
|
||||
celui vu juste avant.
|
||||
|
||||
Exemple de code :
|
||||
|
@ -238,8 +238,8 @@ $url_array = [
|
|||
'a' => 'world',
|
||||
];
|
||||
|
||||
// Indique à Minz de rediriger l'utilisateur vers la page hello/world.
|
||||
// Notez qu'il s'agit d'une redirection au sens Minz du terme, pas d'une redirection que le navigateur va avoir à gérer (code HTTP 301 ou 302)
|
||||
// Indique à Minz de rediriger l’utilisateur vers la page hello/world.
|
||||
// Notez qu’il s’agit d’une redirection au sens Minz du terme, pas d’une redirection que le navigateur va avoir à gérer (code HTTP 301 ou 302)
|
||||
// Le code qui suit forward() va ainsi être exécuté !
|
||||
Minz_Request::forward($url_array);
|
||||
|
||||
|
@ -251,12 +251,12 @@ Minz_Request::forward($url_array, true);
|
|||
```
|
||||
|
||||
Il est très fréquent de vouloir effectuer une redirection tout en affichant
|
||||
un message à l'utilisateur pour lui indiquer comment s'est déroulée l'action
|
||||
effectuée juste avant (validation d'un formulaire par exemple). Un tel
|
||||
un message à l’utilisateur pour lui indiquer comment s’est déroulée l’action
|
||||
effectuée juste avant (validation d’un formulaire par exemple). Un tel
|
||||
message est passé par une variable de session `notification` (note : nous
|
||||
parlerons plutôt de « feedback » désormais pour éviter la confusion avec une
|
||||
notification qui peut survenir à tout moment). Pour faciliter ce genre
|
||||
d'action très fréquente, il existe deux raccourcis qui effectuent tout deux
|
||||
d’action très fréquente, il existe deux raccourcis qui effectuent tout deux
|
||||
une redirection type 302 en affectant un message de feedback :
|
||||
|
||||
```php
|
||||
|
@ -266,8 +266,8 @@ $url_array = [
|
|||
'c' => 'hello',
|
||||
'a' => 'world',
|
||||
];
|
||||
$feedback_good = 'Tout s\'est bien passé !';
|
||||
$feedback_bad = 'Oups, quelque chose n\'a pas marché.';
|
||||
$feedback_good = 'Tout s’est bien passé !';
|
||||
$feedback_bad = 'Oups, quelque chose n’a pas marché.';
|
||||
|
||||
Minz_Request::good($feedback_good, $url_array);
|
||||
|
||||
|
@ -280,32 +280,32 @@ Minz_Request::bad($feedback_bad, $url_array);
|
|||
|
||||
### Gestion de la traduction
|
||||
|
||||
Il est fréquent (et c'est un euphémisme) de vouloir afficher des phrases à
|
||||
l'utilisateur. Dans l'exemple précédent par exemple, nous affichions un
|
||||
feedback à l'utilisateur en fonction du résultat d'une validation de
|
||||
Il est fréquent (et c’est un euphémisme) de vouloir afficher des phrases à
|
||||
l’utilisateur. Dans l’exemple précédent par exemple, nous affichions un
|
||||
feedback à l’utilisateur en fonction du résultat d’une validation de
|
||||
formulaire. Le problème est que FreshRSS possède des utilisateurs de
|
||||
différentes nationalités. Il est donc nécessaire de pouvoir gérer
|
||||
différentes langues pour ne pas rester cantonné à l'Anglais ou au Français.
|
||||
différentes langues pour ne pas rester cantonné à l’Anglais ou au Français.
|
||||
|
||||
La solution consiste à utiliser la classe `Minz_Translate` qui permet de
|
||||
traduire dynamiquement FreshRSS (ou toute application basée sur Minz). Avant
|
||||
d'utiliser ce module, il est nécessaire de savoir où trouver les chaînes de
|
||||
d’utiliser ce module, il est nécessaire de savoir où trouver les chaînes de
|
||||
caractères à traduire. Chaque langue possède son propre sous-répertoire dans
|
||||
un répertoire parent nommé `i18n`. Par exemple, les fichiers de langue en
|
||||
Français sont situés dans `i18n/fr/`. Il existe sept fichiers différents :
|
||||
|
||||
* `admin.php` pour tout ce qui est relatif à l'administration de FreshRSS ;
|
||||
* `conf.php` pour l'aspect configuration ;
|
||||
* `admin.php` pour tout ce qui est relatif à l’administration de FreshRSS ;
|
||||
* `conf.php` pour l’aspect configuration ;
|
||||
* `feedback.php` contient les traductions des messages de feedback ;
|
||||
* `gen.php` stocke ce qui est global à FreshRSS (gen pour « general ») ;
|
||||
* `index.php` pour la page principale qui liste les flux et la page « À propos » ;
|
||||
* `install.php` contient les phrases relatives à l'installation de FreshRSS ;
|
||||
* `sub.php` pour l'aspect gestion des abonnements (sub pour « subscription »).
|
||||
* `install.php` contient les phrases relatives à l’installation de FreshRSS ;
|
||||
* `sub.php` pour l’aspect gestion des abonnements (sub pour « subscription »).
|
||||
|
||||
Cette organisation permet de ne pas avoir un unique énorme fichier de
|
||||
traduction.
|
||||
|
||||
Les fichiers de traduction sont assez simples : il s'agit seulement de
|
||||
Les fichiers de traduction sont assez simples : il s’agit seulement de
|
||||
retourner un tableau PHP contenant les traductions. Extrait du fichier
|
||||
`app/i18n/fr/gen.php` :
|
||||
|
||||
|
@ -329,7 +329,7 @@ return array(
|
|||
?>
|
||||
```
|
||||
|
||||
Pour accéder à ces traductions, `Minz_Translate` va nous aider à l'aide de
|
||||
Pour accéder à ces traductions, `Minz_Translate` va nous aider à l’aide de
|
||||
sa méthode `Minz_Translate::t()`. Comme cela peut être un peu long à taper,
|
||||
il a été introduit un raccourci qui **doit** être utilisé en toutes
|
||||
circonstances : `_t()`. Exemple de code :
|
||||
|
@ -342,20 +342,20 @@ circonstances : `_t()`. Exemple de code :
|
|||
</p>
|
||||
```
|
||||
|
||||
La chaîne à passer à la fonction `_t()` consiste en une série d'identifiants
|
||||
La chaîne à passer à la fonction `_t()` consiste en une série d’identifiants
|
||||
séparés par des points. Le premier identifiant indique de quel fichier on
|
||||
veut extraire la traduction (dans notre cas présent, de `gen.php`), tandis
|
||||
que les suivantes indiquent des entrées de tableaux. Ainsi `action` est une
|
||||
entrée du tableau principal et `back_to_rss_feeds` est une entrée du tableau
|
||||
`action`. Cela permet d'organiser encore un peu plus nos fichiers de
|
||||
`action`. Cela permet d’organiser encore un peu plus nos fichiers de
|
||||
traduction.
|
||||
|
||||
Il existe un petit cas particulier qui permet parfois de se simplifier la
|
||||
vie : le cas de l'identifiant `_`. Celui-ci doit nécessairement être présent
|
||||
en bout de chaîne et permet de donner une valeur à l'identifiant de niveau
|
||||
supérieur. C'est assez dur à expliquer mais très simple à comprendre. Dans
|
||||
l'exemple donné plus haut, un `_` est associé à la valeur `FreshRSS` : cela
|
||||
signifie qu'il n'y a pas besoin d'écrire `_t('gen.freshrss._')` mais
|
||||
vie : le cas de l’identifiant `_`. Celui-ci doit nécessairement être présent
|
||||
en bout de chaîne et permet de donner une valeur à l’identifiant de niveau
|
||||
supérieur. C’est assez dur à expliquer mais très simple à comprendre. Dans
|
||||
l’exemple donné plus haut, un `_` est associé à la valeur `FreshRSS` : cela
|
||||
signifie qu’il n’y a pas besoin d’écrire `_t('gen.freshrss._')` mais
|
||||
`_t('gen.freshrss')` suffit.
|
||||
|
||||
### Gestion de la configuration
|
||||
|
@ -364,14 +364,14 @@ signifie qu'il n'y a pas besoin d'écrire `_t('gen.freshrss._')` mais
|
|||
|
||||
Nous y voilà ! Nous avons abordé les fonctionnalités les plus utiles de Minz
|
||||
et qui permettent de faire tourner FreshRSS correctement et il est plus que
|
||||
temps d'aborder les extensions en elles-même.
|
||||
temps d’aborder les extensions en elles-même.
|
||||
|
||||
Une extension permet donc d'ajouter des fonctionnalités facilement à
|
||||
Une extension permet donc d’ajouter des fonctionnalités facilement à
|
||||
FreshRSS sans avoir à toucher au cœur du projet directement.
|
||||
|
||||
### Travailler dans Docker
|
||||
|
||||
Quand on travaille sur une extension, c'est toujours plus facile de la travailler directement dans son environnement. Avec Docker, on peut exploiter l'option ```volume``` quand on démarre le conteneur. Heureusement, on peut l'utiliser sans avoir de connaissances particulières de Docker en utilisant la règle du Makefile :
|
||||
Quand on travaille sur une extension, c’est toujours plus facile de la travailler directement dans son environnement. Avec Docker, on peut exploiter l’option ```volume``` quand on démarre le conteneur. Heureusement, on peut l’utiliser sans avoir de connaissances particulières de Docker en utilisant la règle du Makefile :
|
||||
```sh
|
||||
make start extensions="/chemin/complet/de/l/extension/1 /chemin/complet/de/l/extension/2"
|
||||
```
|
||||
|
@ -379,18 +379,18 @@ make start extensions="/chemin/complet/de/l/extension/1 /chemin/complet/de/l/ext
|
|||
### Les fichiers et répertoires de base
|
||||
|
||||
La première chose à noter est que **toutes** les extensions **doivent** se
|
||||
situer dans le répertoire `extensions`, à la base de l'arborescence de
|
||||
situer dans le répertoire `extensions`, à la base de l’arborescence de
|
||||
FreshRSS. Une extension est un répertoire contenant un ensemble de fichiers
|
||||
et sous-répertoires obligatoires ou facultatifs. La convention veut que l'on
|
||||
précède le nom du répertoire principal par un « x » pour indiquer qu'il ne
|
||||
s'agit pas d'une extension incluse par défaut dans FreshRSS.
|
||||
et sous-répertoires obligatoires ou facultatifs. La convention veut que l’on
|
||||
précède le nom du répertoire principal par un « x » pour indiquer qu’il ne
|
||||
s’agit pas d’une extension incluse par défaut dans FreshRSS.
|
||||
|
||||
Le répertoire principal d'une extension doit comporter au moins deux
|
||||
Le répertoire principal d’une extension doit comporter au moins deux
|
||||
fichiers **obligatoire** :
|
||||
|
||||
* Un fichier `metadata.json` qui contient une description de l'extension. Ce
|
||||
* Un fichier `metadata.json` qui contient une description de l’extension. Ce
|
||||
fichier est écrit en JSON ;
|
||||
* Un fichier `extension.php` contenant le point d'entrée de l'extension.
|
||||
* Un fichier `extension.php` contenant le point d’entrée de l’extension.
|
||||
|
||||
Please note that there is a not a required link between the directory name
|
||||
of the extension and the name of the class inside `extension.php`, but you
|
||||
|
@ -434,14 +434,14 @@ important elements. It must contain a valid JSON array containing the
|
|||
following entries:
|
||||
|
||||
* `name` : le nom de votre extension ;
|
||||
* `author` : votre nom, éventuellement votre adresse mail mais il n'y a pas
|
||||
* `author` : votre nom, éventuellement votre adresse mail mais il n’y a pas
|
||||
de format spécifique à adopter ;
|
||||
* `description` : une description de votre extension ;
|
||||
* `version` : le numéro de version actuel de l'extension ;
|
||||
* `entrypoint` : indique le point d'entrée de votre extension. Il doit
|
||||
* `version` : le numéro de version actuel de l’extension ;
|
||||
* `entrypoint` : indique le point d’entrée de votre extension. Il doit
|
||||
correspondre au nom de la classe contenue dans le fichier `extension.php`
|
||||
sans le suffixe `Extension` (donc si le point d'entrée est `HelloWorld`,
|
||||
votre classe s'appellera `HelloWorldExtension`) ;
|
||||
sans le suffixe `Extension` (donc si le point d’entrée est `HelloWorld`,
|
||||
votre classe s’appellera `HelloWorldExtension`) ;
|
||||
* `type` : définit le type de votre extension. Il existe deux types :
|
||||
`system` et `user`. Nous étudierons cette différence juste après.
|
||||
|
||||
|
@ -524,7 +524,7 @@ The following events are available:
|
|||
|
||||
* `check_url_before_add` (`function($url) -> Url | null`): will be executed
|
||||
every time a URL is added. The URL itself will be passed as
|
||||
parameter. This way a website known to have feeds which doesn't advertise
|
||||
parameter. This way a website known to have feeds which doesn’t advertise
|
||||
it in the header can still be automatically supported.
|
||||
* `entry_before_display` (`function($entry) -> Entry | null`): will be
|
||||
executed every time an entry is rendered. The entry itself (instance of
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# Running tests
|
||||
|
||||
FreshRSS is tested with [PHPUnit](https://phpunit.de/). No code should be
|
||||
merged in `edge` if the tests don't pass.
|
||||
merged in `edge` if the tests don’t pass.
|
||||
|
||||
## Locally
|
||||
|
||||
|
@ -17,7 +17,7 @@ verification fails, the file is deleted. In this case, you should [open an
|
|||
issue on GitHub](https://github.com/FreshRSS/FreshRSS/issues/new) to let
|
||||
maintainers know about the problem.
|
||||
|
||||
Then, it executes PHPUnit in a Docker container. If you don't use Docker,
|
||||
Then, it executes PHPUnit in a Docker container. If you don’t use Docker,
|
||||
you can run the command directly with:
|
||||
|
||||
```sh
|
||||
|
@ -28,6 +28,6 @@ NO_DOCKER=true make test
|
|||
|
||||
Les tests sont lancés automatiquement dès que vous ouvrez une « pull request » sur GitHub.
|
||||
Ceux-ci sont lancés grace aux « [GitHub Actions](https://github.com/FreshRSS/FreshRSS/actions) ».
|
||||
Cette action est nécessaire pour s'assurer qu'aucune régression ne soit introduite dans le code. Nous n'accepterons aucune PR si les tests ne sont pas valides, nous vous demanderons donc de corriger tout ce qui doit l'être avant de commencer à relire votre code.
|
||||
Cette action est nécessaire pour s’assurer qu’aucune régression ne soit introduite dans le code. Nous n’accepterons aucune PR si les tests ne sont pas valides, nous vous demanderons donc de corriger tout ce qui doit l’être avant de commencer à relire votre code.
|
||||
|
||||
Si cela vous intéresse, vous pouvez étudier [le fichier de configuration](https://github.com/FreshRSS/FreshRSS/blob/edge/.github/workflows/tests.yml).
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
# Préparer la sortie
|
||||
|
||||
Afin d'avoir le plus de retour possible avant une sortie, il est préférable
|
||||
de l'annoncer sur GitHub en créant un ticket dédié ([voir les
|
||||
Afin d’avoir le plus de retour possible avant une sortie, il est préférable
|
||||
de l’annoncer sur GitHub en créant un ticket dédié ([voir les
|
||||
exemples](https://github.com/FreshRSS/FreshRSS/search?utf8=%E2%9C%93&q=Call+for+testing&type=Issues)).
|
||||
Ceci est à faire **au moins une semaine à l'avance**.
|
||||
Ceci est à faire **au moins une semaine à l’avance**.
|
||||
|
||||
Il est aussi recommandé de faire l'annonce sur mailing@freshrss.org.
|
||||
Il est aussi recommandé de faire l’annonce sur mailing@freshrss.org.
|
||||
|
||||
## S'assurer de l'état de dev
|
||||
## S’assurer de l’état de dev
|
||||
|
||||
Avant de sortir une nouvelle version de FreshRSS, il faut vous assurer que
|
||||
le code est stable et ne présente pas de bugs majeurs. Idéalement, il
|
||||
|
@ -33,7 +33,7 @@ $ git push && git push --tags
|
|||
|
||||
## Mise à jour de update.freshrss.org
|
||||
|
||||
Il est important de mettre à jour update.freshrss.org puisqu'il s'agit du
|
||||
Il est important de mettre à jour update.freshrss.org puisqu’il s’agit du
|
||||
service par défaut gérant les mises à jour automatiques de FreshRSS.
|
||||
|
||||
Le dépot gérant le code se trouve sur GitHub :
|
||||
|
@ -48,10 +48,10 @@ script ne doit pas inclure de code spécifique à une version particulière !)
|
|||
et `update_util.php` contenant une liste de fonctions utiles à tous les
|
||||
scripts.
|
||||
|
||||
Afin d'écrire un nouveau script, il est préférable de copier / coller celui
|
||||
Afin d’écrire un nouveau script, il est préférable de copier / coller celui
|
||||
de la dernière version ou de partir de `update_to_dev.php`. La première
|
||||
chose à faire est de définir l'URL à partir de laquelle sera téléchargée le
|
||||
package FreshRSS (`PACKAGE_URL`). L'URL est de la forme
|
||||
chose à faire est de définir l’URL à partir de laquelle sera téléchargée le
|
||||
package FreshRSS (`PACKAGE_URL`). L’URL est de la forme
|
||||
`https://codeload.github.com/FreshRSS/FreshRSS/zip/x.y.z`.
|
||||
|
||||
Il existe ensuite 5 fonctions à remplir :
|
||||
|
@ -60,18 +60,18 @@ Il existe ensuite 5 fonctions à remplir :
|
|||
données, de vérifier sa structure, de télécharger le package FreshRSS, de
|
||||
le déployer et de tout nettoyer. Cette fonction est pré-remplie mais des
|
||||
ajustements peuvent être faits si besoin est (ex. réorganisation de la
|
||||
structure de `./data`). Elle retourne `true` si aucun problème n'est
|
||||
structure de `./data`). Elle retourne `true` si aucun problème n’est
|
||||
survenu ou une chaîne de caractères indiquant un soucis ;
|
||||
* `need_info_update()` retourne `true` si l'utilisateur doit intervenir
|
||||
* `need_info_update()` retourne `true` si l’utilisateur doit intervenir
|
||||
durant la mise à jour ou `false` sinon ;
|
||||
* `ask_info_update()` affiche un formulaire à l'utilisateur si
|
||||
* `ask_info_update()` affiche un formulaire à l’utilisateur si
|
||||
`need_info_update()` a retourné `true` ;
|
||||
* `save_info_update()` est chargée de sauvegarder les informations
|
||||
renseignées par l'utilisateur (issues du formulaire de
|
||||
renseignées par l’utilisateur (issues du formulaire de
|
||||
`ask_info_update()`) ;
|
||||
* `do_post_update()` est exécutée à la fin de la mise à jour et prend en
|
||||
compte le code de la nouvelle version (ex. si la nouvelle version modifie
|
||||
l'objet `Minz_Configuration`, vous bénéficierez de ces améliorations).
|
||||
l’objet `Minz_Configuration`, vous bénéficierez de ces améliorations).
|
||||
|
||||
## Mise à jour du fichier de versions
|
||||
|
||||
|
@ -87,7 +87,7 @@ return array(
|
|||
// STABLE
|
||||
'0.8.0' => '1.0.0',
|
||||
'0.8.1' => '1.0.0',
|
||||
'1.0.0' => '1.0.1', // doesn't exist (yet)
|
||||
'1.0.0' => '1.0.1', // doesn’t exist (yet)
|
||||
// DEV
|
||||
'1.1.2-dev' => 'dev',
|
||||
'1.1.3-dev' => 'dev',
|
||||
|
@ -100,11 +100,11 @@ Et voici comment fonctionne cette table :
|
|||
* à gauche se trouve la version N, à droite la version N+1 ;
|
||||
* les versions `x.y.z-dev` sont **toutes** mises à jour vers `edge` ;
|
||||
* les versions stables sont mises à jour vers des versions stables ;
|
||||
* il est possible de sauter plusieurs versions d'un coup à condition que les
|
||||
* il est possible de sauter plusieurs versions d’un coup à condition que les
|
||||
scripts de mise à jour le prennent en charge ;
|
||||
* il est conseillé d'indiquer la correspondance de la version courante vers
|
||||
sa potentielle future version en précisant que cette version n'existe pas
|
||||
encore. Tant que le script correspondant n'existera pas, rien ne se
|
||||
* il est conseillé d’indiquer la correspondance de la version courante vers
|
||||
sa potentielle future version en précisant que cette version n’existe pas
|
||||
encore. Tant que le script correspondant n’existera pas, rien ne se
|
||||
passera.
|
||||
|
||||
Il est **très fortement** indiqué de garder ce fichier rangé selon les
|
||||
|
@ -114,7 +114,7 @@ numéros de versions en séparant les versions stables et de dev.
|
|||
|
||||
Avant de mettre à jour update.freshrss.org, il est préférable de tester avec
|
||||
dev.update.freshrss.org qui correspond à la pré-production. Mettez donc à
|
||||
jour dev.update.freshrss.org et changez l'URL `FRESHRSS_UPDATE_WEBSITE` de
|
||||
jour dev.update.freshrss.org et changez l’URL `FRESHRSS_UPDATE_WEBSITE` de
|
||||
votre instance FreshRSS. Lancez la mise à jour et vérifiez que celle-ci se
|
||||
déroule correctement.
|
||||
|
||||
|
@ -131,12 +131,12 @@ update.freshrss.org :
|
|||
|
||||
## Annoncer publiquement la sortie
|
||||
|
||||
Lorsque tout fonctionne, il est temps d'annoncer la sortie au monde entier !
|
||||
Lorsque tout fonctionne, il est temps d’annoncer la sortie au monde entier !
|
||||
|
||||
* sur GitHub en créant [une nouvelle
|
||||
release](https://github.com/FreshRSS/FreshRSS/releases/new) ;
|
||||
* sur le blog de freshrss.org au minimum pour les versions stables (écrire
|
||||
l'article sur
|
||||
l’article sur
|
||||
[FreshRSS/freshrss.org](https://github.com/FreshRSS/freshrss.org)).
|
||||
* sur Twitter (compte [@FreshRSS](https://twitter.com/FreshRSS)) ;
|
||||
* et sur mailing@freshrss.org ;
|
||||
|
@ -152,5 +152,5 @@ $ vim CHANGELOG.md
|
|||
$ git add CHANGELOG.md && git commit && git push
|
||||
```
|
||||
|
||||
Pensez aussi à mettre à jour update.freshrss.org pour qu'il prenne en compte
|
||||
Pensez aussi à mettre à jour update.freshrss.org pour qu’il prenne en compte
|
||||
la version de développement actuelle.
|
||||
|
|
|
@ -119,7 +119,7 @@ server {
|
|||
fastcgi_split_path_info ^(.+\.php)(/.*)$;
|
||||
# Par défaut la variable PATH_INFO n’est pas définie sous PHP-FPM
|
||||
# or l’API FreshRSS greader.php en a besoin. Si vous avez un “Bad Request”, vérifiez bien cette dernière !
|
||||
# REMARQUE : l'utilisation de la variable $path_info est requis. Pour plus de détails, voir :
|
||||
# REMARQUE : l’utilisation de la variable $path_info est requis. Pour plus de détails, voir :
|
||||
# https://trac.nginx.org/nginx/ticket/321
|
||||
set $path_info $fastcgi_path_info;
|
||||
fastcgi_param PATH_INFO $path_info;
|
||||
|
|
|
@ -1,39 +1,39 @@
|
|||
Découvrir un nouveau logiciel n'est pas toujours facile. Si nous avons voulu
|
||||
FreshRSS le plus intuitif possible, vous aurez peut-être besoin d'un coup de
|
||||
Découvrir un nouveau logiciel n’est pas toujours facile. Si nous avons voulu
|
||||
FreshRSS le plus intuitif possible, vous aurez peut-être besoin d’un coup de
|
||||
main pour le maîtriser.
|
||||
|
||||
Cette section se propose de vous aider dans la prise en main de l'outil. Il
|
||||
ne s'agit que de liens menant vers les autres pages de la documentation mais
|
||||
Cette section se propose de vous aider dans la prise en main de l’outil. Il
|
||||
ne s’agit que de liens menant vers les autres pages de la documentation mais
|
||||
ordonnées dans un ordre spécifique aux nouveaux arrivants.
|
||||
|
||||
[Après l'installation](../../en/admins/03_Installation.md), la première
|
||||
chose à faire est d'ajouter un ou plusieurs sites à suivre. Pour cela
|
||||
plusieurs choix s'offrent à vous :
|
||||
[Après l’installation](../../en/admins/03_Installation.md), la première
|
||||
chose à faire est d’ajouter un ou plusieurs sites à suivre. Pour cela
|
||||
plusieurs choix s’offrent à vous :
|
||||
|
||||
1. [Ajouter un flux manuellement](04_Subscriptions.md#ajouter-un-flux)
|
||||
2. [Importer un fichier OPML ou JSON](04_Subscriptions.md#import-et-export)
|
||||
3. [Utiliser le bookmark dédié](04_Subscriptions.md#utiliser-le-bookmark)
|
||||
|
||||
Une fois que vous avez ajouté vos flux à FreshRSS, il est temps de les
|
||||
lire. Pour cela, trois modes de lecture s'offrent à vous :
|
||||
lire. Pour cela, trois modes de lecture s’offrent à vous :
|
||||
|
||||
1. [La vue normale](03_Main_view.md#la-vue-normale) qui permet de voir et de
|
||||
lire rapidement les nouveaux articles
|
||||
2. [La vue globale](03_Main_view.md#la-vue-globale) est destinée à vous
|
||||
offrir un panorama de l'état de vos flux
|
||||
offrir un panorama de l’état de vos flux
|
||||
3. [La vue lecture](03_Main_view.md#la-vue-lecture) est pensée pour vous
|
||||
offrir un meilleur confort de lecture
|
||||
|
||||
Bien, vous maitrisez maintenant la vue que vous préférez ? Il est temps de
|
||||
vous offrir un peu plus de confort de lecture. FreshRSS est grandement
|
||||
configurable et c'est à vous de trouver la configuration qui vous conviendra
|
||||
configurable et c’est à vous de trouver la configuration qui vous conviendra
|
||||
le plus. Voici tout de même quelques pistes pour améliorer votre quotidien
|
||||
sur FreshRSS :
|
||||
|
||||
* [Rangez vos flux dans des
|
||||
catégories](04_Subscriptions.md#organisation_des_flux)
|
||||
* [Configurez votre page
|
||||
d'accueil](05_Configuration.md#personnaliser-la-vue)
|
||||
d’accueil](05_Configuration.md#personnaliser-la-vue)
|
||||
* [Configurez vos options de
|
||||
lecture](05_Configuration.md#options-de-lecture)
|
||||
* [Mettez à jour vos flux](03_Main_view.md#rafraichir-les-flux)
|
||||
|
|
|
@ -3,15 +3,15 @@
|
|||
|
||||
## Langue
|
||||
|
||||
À l'heure actuelle, FreshRSS est disponible en 13 langues. Après validation
|
||||
de ce choix, l'interface sera affichée dans la langue choisie, même si
|
||||
certaines parties de l'interface peuvent ne pas encore avoir été
|
||||
À l’heure actuelle, FreshRSS est disponible en 13 langues. Après validation
|
||||
de ce choix, l’interface sera affichée dans la langue choisie, même si
|
||||
certaines parties de l’interface peuvent ne pas encore avoir été
|
||||
traduites. Si vous voulez aider à la traduction, regardez comment vous
|
||||
pouvez [contribuer au
|
||||
projet](../contributing.md#contribute-to-internationalization-i18n).
|
||||
|
||||
Il y a des parties de FreshRSS qui ne sont pas traduites et qui n'ont pas
|
||||
vocation à l'être. Pour le moment, les logs visibles dans l'application
|
||||
Il y a des parties de FreshRSS qui ne sont pas traduites et qui n’ont pas
|
||||
vocation à l’être. Pour le moment, les logs visibles dans l’application
|
||||
ainsi que celle générées par le script de mise à jour automatique en font
|
||||
partie.
|
||||
|
||||
|
@ -20,7 +20,7 @@ pt-br, ru, tr, zh-cn.
|
|||
|
||||
## Thème
|
||||
|
||||
Les goûts et les couleurs, ça ne se discute pas. C'est pourquoi FreshRSS
|
||||
Les goûts et les couleurs, ça ne se discute pas. C’est pourquoi FreshRSS
|
||||
propose huit thèmes officiels :
|
||||
|
||||
* *Blue Lagoon* par **Mister aiR**
|
||||
|
@ -35,44 +35,44 @@ propose huit thèmes officiels :
|
|||
Si aucun de ceux proposés ne convient, il est toujours possible de [créer
|
||||
son propre thème](../developers/04_Frontend/02_Design.md).
|
||||
|
||||
Pour sélectionner un thème, il suffit de faire défiler les thèmes jusqu'à
|
||||
l'apparition du thème choisi. Après validation, le thème sera appliqué à
|
||||
l'interface.
|
||||
Pour sélectionner un thème, il suffit de faire défiler les thèmes jusqu’à
|
||||
l’apparition du thème choisi. Après validation, le thème sera appliqué à
|
||||
l’interface.
|
||||
|
||||
## Largeur du contenu
|
||||
|
||||
Il y en a qui préfère des lignes de texte courtes, d'autres qui préfèrent
|
||||
maximiser l'espace disponible sur l'écran. Pour satisfaire le maximum de
|
||||
Il y en a qui préfère des lignes de texte courtes, d’autres qui préfèrent
|
||||
maximiser l’espace disponible sur l’écran. Pour satisfaire le maximum de
|
||||
personne, il est possible de choisir la largeur du contenu affiché. Il y a
|
||||
quatre réglages disponibles :
|
||||
|
||||
* **Fine** qui affiche le contenu jusqu'à 550 pixels
|
||||
* **Moyenne** qui affiche le contenu jusqu'à 800 pixels
|
||||
* **Large** qui affiche le contenu jusqu'à 1000 pixels
|
||||
* **Fine** qui affiche le contenu jusqu’à 550 pixels
|
||||
* **Moyenne** qui affiche le contenu jusqu’à 800 pixels
|
||||
* **Large** qui affiche le contenu jusqu’à 1000 pixels
|
||||
* **Pas de limite** qui affiche le contenu sur 100% de la place disponible
|
||||
|
||||
## Icônes d'article
|
||||
## Icônes d’article
|
||||
|
||||
Veuillez noter que cette section n'affecte que la vue normale.
|
||||
Veuillez noter que cette section n’affecte que la vue normale.
|
||||
|
||||
![Configuration des icônes
|
||||
d'article](../img/users/configuration.article.icons.png)
|
||||
d’article](../img/users/configuration.article.icons.png)
|
||||
|
||||
Chaque article est rendu avec un en-tête (ligne supérieure) et un pied de
|
||||
page (ligne inférieure). Dans cette section, vous pouvez choisir ce qui sera
|
||||
affiché dans ceux-ci.
|
||||
|
||||
Si vous désactivez tous les éléments de la ligne supérieure, vous pourrez
|
||||
toujours les voir, puisqu'il contient le nom du flux et le titre de
|
||||
l'article. Mais si vous faites le même chose pour la ligne inférieure, elle
|
||||
toujours les voir, puisqu’il contient le nom du flux et le titre de
|
||||
l’article. Mais si vous faites le même chose pour la ligne inférieure, elle
|
||||
sera vide.
|
||||
|
||||
## Temps d'affichage de la notification HTML5
|
||||
## Temps d’affichage de la notification HTML5
|
||||
|
||||
Après la mise à jour automatique des flux, FreshRSS utilise l'API de
|
||||
notification de HTML5 pour avertir de l'arrivée de nouveaux articles.
|
||||
Après la mise à jour automatique des flux, FreshRSS utilise l’API de
|
||||
notification de HTML5 pour avertir de l’arrivée de nouveaux articles.
|
||||
|
||||
Il est possible de régler la durée d'affichage de cette notification. Par
|
||||
Il est possible de régler la durée d’affichage de cette notification. Par
|
||||
défaut, la valeur est 0.
|
||||
|
||||
## Show the navigation button
|
||||
|
@ -83,7 +83,7 @@ browsing on mobile. The drawback is that they eat up some precious space.
|
|||
![navigation button
|
||||
configuration](../img/users/configuration.navigation.button.png)
|
||||
|
||||
If you don't use those buttons because you never browse on mobile or because
|
||||
If you don’t use those buttons because you never browse on mobile or because
|
||||
you browse with gestures, you can disable them from the interface.
|
||||
|
||||
# Reading
|
||||
|
@ -127,7 +127,7 @@ To ease the use of the application, FreshRSS comes with a lot of predefined
|
|||
keyboard shortcuts. They allow actions to improve the user experience with
|
||||
a keyboard.
|
||||
|
||||
Of course, if you're not satisfied with the key mapping, you can change you
|
||||
Of course, if you’re not satisfied with the key mapping, you can change you
|
||||
configuration to fit your needs.
|
||||
|
||||
There are 4 types of shortcuts:
|
||||
|
@ -140,15 +140,15 @@ There are 4 types of shortcuts:
|
|||
1. Other actions: they allow other interactions with the application, like
|
||||
opening the user queries menu or accessing the documentation.
|
||||
|
||||
It's worth noting that the share article action has two levels. Once you
|
||||
It’s worth noting that the share article action has two levels. Once you
|
||||
press the shortcut, a menu containing all the share options opens. To
|
||||
choose one share option, you need to select it by its number. When there is
|
||||
only one option, it's selected automatically though.
|
||||
only one option, it’s selected automatically though.
|
||||
|
||||
The same process applies to the user queries.
|
||||
|
||||
Be aware that there is no validation on the selected shortcuts. This means
|
||||
that if you assign a shortcut to more than one action, you'll end up with
|
||||
that if you assign a shortcut to more than one action, you’ll end up with
|
||||
some unexpected behavior.
|
||||
|
||||
# User queries
|
||||
|
@ -183,8 +183,8 @@ AuthType Basic
|
|||
Require user marie
|
||||
```
|
||||
|
||||
Plus d'informations dans [la documentation
|
||||
d'Apache.](http://httpd.apache.org/docs/trunk/howto/auth.html#gettingitworking)
|
||||
Plus d’informations dans [la documentation
|
||||
d’Apache.](http://httpd.apache.org/docs/trunk/howto/auth.html#gettingitworking)
|
||||
|
||||
# Gestion des flux
|
||||
|
||||
|
@ -206,28 +206,28 @@ d'Apache.](http://httpd.apache.org/docs/trunk/howto/auth.html#gettingitworking)
|
|||
|
||||
La question revient régulièrement, je vais essayer de clarifier ici comment
|
||||
on peut récupérer un flux RSS tronqué avec FreshRSS. Sachez avant tout que
|
||||
la manière de s'y prendre n'est absolument pas "user friendly", mais elle
|
||||
la manière de s’y prendre n’est absolument pas "user friendly", mais elle
|
||||
fonctionne. :)
|
||||
|
||||
Sachez aussi que par cette manière vous générez beaucoup plus de trafic vers
|
||||
les sites d'origines et qu'ils peuvent vous bloquer par conséquent. Les
|
||||
les sites d’origines et qu’ils peuvent vous bloquer par conséquent. Les
|
||||
performances de FreshRSS sont aussi moins bonnes car vous devez alors aller
|
||||
chercher le contenu des articles un par un. C'est donc une fonctionnalité à
|
||||
chercher le contenu des articles un par un. C’est donc une fonctionnalité à
|
||||
utiliser avec parcimonie !
|
||||
|
||||
Ce que j'entends par "Chemin CSS des articles sur le site d’origine"
|
||||
Ce que j’entends par "Chemin CSS des articles sur le site d’origine"
|
||||
correspond en fait au "chemin" constitué par les IDs et les classes (en
|
||||
html, correspond aux attributs id et class) pour récupérer uniquement la
|
||||
partie intéressante qui correspond à l'article. L'idéal est que ce chemin
|
||||
partie intéressante qui correspond à l’article. L’idéal est que ce chemin
|
||||
commence par un id (qui est unique pour la page).
|
||||
|
||||
#### Exemple : Rue89
|
||||
|
||||
Pour trouver ce chemin, il faut se rendre à l'adresse d'un des articles tronqués.
|
||||
Il faut alors chercher le "bloc" HTML correspondant au contenu de l'article
|
||||
Pour trouver ce chemin, il faut se rendre à l’adresse d’un des articles tronqués.
|
||||
Il faut alors chercher le "bloc" HTML correspondant au contenu de l’article
|
||||
(dans le code source !)
|
||||
|
||||
On trouve ici que le bloc qui englobe uniquement le contenu de l'article est ```<div class="content clearfix">```. On ne va garder que la classe `.content` ici. Néanmoins, comme je le disais plus haut, il est préférable de commencer le chemin avec un id. Si on remonte au bloc parent, il s'agit du bloc ```<div id="article">``` et c'est parfait ! Le chemin sera donc ```#article .content```.
|
||||
On trouve ici que le bloc qui englobe uniquement le contenu de l’article est ```<div class="content clearfix">```. On ne va garder que la classe `.content` ici. Néanmoins, comme je le disais plus haut, il est préférable de commencer le chemin avec un id. Si on remonte au bloc parent, il s’agit du bloc ```<div id="article">``` et c’est parfait ! Le chemin sera donc ```#article .content```.
|
||||
|
||||
#### Liste de correspondances site → chemin css
|
||||
|
||||
|
@ -236,10 +236,10 @@ On trouve ici que le bloc qui englobe uniquement le contenu de l'article est ```
|
|||
* Lesnumériques : ```article#body div.text.clearfix```
|
||||
* Phoronix : ```#main .content```
|
||||
|
||||
### Récupérer un flux tronqué à l'aide d'outils externes
|
||||
### Récupérer un flux tronqué à l’aide d’outils externes
|
||||
|
||||
Des outils complémentaires peuvent être utilisés pour récupérer le contenu
|
||||
complet d'un article, comme :
|
||||
complet d’un article, comme :
|
||||
|
||||
* [RSS-Bridge](https://github.com/RSS-Bridge/rss-bridge)
|
||||
* [Full-Text RSS](https://bitbucket.org/fivefilters/full-text-rss)
|
||||
|
|
|
@ -5,8 +5,8 @@ pour une autre possibilité et des généralités sur l’accès par API.
|
|||
|
||||
## Clients compatibles GReader
|
||||
|
||||
De nombreux clients RSS prennent en charge l'API Fever, mais ils semblent
|
||||
comprendre l'API Fever un peu différemment. Si votre client préféré ne
|
||||
De nombreux clients RSS prennent en charge l’API Fever, mais ils semblent
|
||||
comprendre l’API Fever un peu différemment. Si votre client préféré ne
|
||||
fonctionne pas correctement avec cette API, veuiller créer un ticket et nous
|
||||
y jetterons un oeil. Mais nous ne pouvons le faire que pour les clients
|
||||
gratuits.
|
||||
|
@ -14,11 +14,11 @@ gratuits.
|
|||
### Utilisation et authentification
|
||||
|
||||
Avant de pouvoir commencer à utiliser cette API, vvous devez activer et
|
||||
configurer l'accès à l'API, qui est [documenté
|
||||
configurer l’accès à l’API, qui est [documenté
|
||||
ici](https://freshrss.github.io/FreshRSS/en/users/06_Mobile_access.html), et
|
||||
réinitialisez ensuite le mot de passe API de l'utilisateur.
|
||||
réinitialisez ensuite le mot de passe API de l’utilisateur.
|
||||
|
||||
Connectez ensuite votre application mobile en utilisant l'adresse de l'API
|
||||
Connectez ensuite votre application mobile en utilisant l’adresse de l’API
|
||||
(e.g. `https://freshrss.example.net/api/fever.php`).
|
||||
|
||||
## Clients compatibles Fever
|
||||
|
@ -41,22 +41,22 @@ Les fonctionnalités suivantes sont implémentées :
|
|||
* récupération des favicons
|
||||
* marquage des entrées comme lues
|
||||
* marquage des entrées comme favoris
|
||||
* marquage d'un flux comme lu
|
||||
* marquage d'une catégorie comme lue
|
||||
* marquage d’un flux comme lu
|
||||
* marquage d’une catégorie comme lue
|
||||
* support des extensions grace au hook `entry_before_display`
|
||||
|
||||
Les fonctionnalités suivantes ne sont pas implémentées :
|
||||
|
||||
* « Hot Links » car il n'y a encore rien dans FreshRSS qui soit similaire ou
|
||||
* « Hot Links » car il n’y a encore rien dans FreshRSS qui soit similaire ou
|
||||
qui puisse être utilisé pour le simuler.
|
||||
|
||||
## Tester et déboguer
|
||||
|
||||
Si l'API ne fonctionne pas comme attendu dans votre lecteur, il est possible
|
||||
Si l’API ne fonctionne pas comme attendu dans votre lecteur, il est possible
|
||||
de la tester manuellement avec un outil tel que
|
||||
[Postman](https://www.getpostman.com/).
|
||||
|
||||
Envoyer une requête POST à l'adresse
|
||||
Envoyer une requête POST à l’adresse
|
||||
<https://freshrss.example.net/api/fever.php?api> devrait vous renvoyer le
|
||||
résultat suivant :
|
||||
```json
|
||||
|
@ -69,7 +69,7 @@ Super, la configuration de base fonctionne !
|
|||
|
||||
Maintenant essayons de faire un appel authentifié. Fever utilise un
|
||||
paramètre `api_key` qui contient le résultat de la fonction de hachage MD5
|
||||
de la valeur `"$username:$apiPassword"`. En considérant que l'utilisateur
|
||||
de la valeur `"$username:$apiPassword"`. En considérant que l’utilisateur
|
||||
est `kevin` et que son mot de passe est `freshrss`, voici la commande à
|
||||
lancer pour calculer la valeur du paramètre `api_key` :
|
||||
|
||||
|
@ -78,7 +78,7 @@ api_key=`echo -n "kevin:freshrss" | md5sum | cut -d' ' -f1`
|
|||
```
|
||||
|
||||
Ajoutez un contenu sous forme de `form-data`à votre requête POST ainsi que
|
||||
le paramètre `api_key` contenant la valeur calculée à l'étape précédente :
|
||||
le paramètre `api_key` contenant la valeur calculée à l’étape précédente :
|
||||
|
||||
```sh
|
||||
curl -s -F "api_key=$api_key" 'https://freshrss.exemple.net/api/fever.php?api'
|
||||
|
@ -93,12 +93,12 @@ Vous devriez obtenir le résultat suivant :
|
|||
}
|
||||
```
|
||||
Parfait, maintenant vous êtes autentifié et vous pouvez commencer à tester
|
||||
les fonctions avancées. Pour cela, il suffit de changer l'adresse en lui
|
||||
les fonctions avancées. Pour cela, il suffit de changer l’adresse en lui
|
||||
ajoutant les paramètres nécessaires à la réalisation des actions
|
||||
supportées. Pour plus d'information, veuillez vous référer à la
|
||||
supportées. Pour plus d’information, veuillez vous référer à la
|
||||
[documentation officielle de Fever](https://feedafever.com/api).
|
||||
|
||||
Voici quelques exemples simples d'appels réalisables :
|
||||
Voici quelques exemples simples d’appels réalisables :
|
||||
|
||||
* <https://freshrss.example.net/api/fever.php?api&items>
|
||||
* <https://freshrss.example.net/api/fever.php?api&feeds>
|
||||
|
@ -123,7 +123,7 @@ fichier `fever.api` pour déterminer la cause des problèmes rencontrés :
|
|||
file_put_contents(__DIR__ . '/fever.log', $_SERVER['HTTP_USER_AGENT'] . ': ' . json_encode($_REQUEST) . PHP_EOL, FILE_APPEND);
|
||||
```
|
||||
|
||||
Utilisez ensuite votre client RSS pour interroger l'API et vérifier le
|
||||
Utilisez ensuite votre client RSS pour interroger l’API et vérifier le
|
||||
fichier `fever.log`.
|
||||
|
||||
## Remerciements
|
||||
|
|
|
@ -49,8 +49,8 @@ possibilité.
|
|||
|
||||
# Clients compatibles
|
||||
|
||||
1. Sur la même page de l'API FreshRSS, notez l'adresse donnée sous "Votre adresse API", comme `https://freshrss.example.net/api/greader.php`
|
||||
* Saisissez l'adresse de l'API dans le client sélectionné puis votre nom d'utilisateur et votre mot de passe spécialement créé pour l'API.
|
||||
1. Sur la même page de l’API FreshRSS, notez l’adresse donnée sous "Votre adresse API", comme `https://freshrss.example.net/api/greader.php`
|
||||
* Saisissez l’adresse de l’API dans le client sélectionné puis votre nom d’utilisateur et votre mot de passe spécialement créé pour l’API.
|
||||
|
||||
2. Vous pouvez maintenant tester sur une application mobile:
|
||||
* Android
|
||||
|
|
|
@ -1,28 +1,28 @@
|
|||
Il est possible que nous n'ayons pas répondu à toutes vos questions dans les
|
||||
parties précédentes. La FAQ regroupe certaines interrogations qui n'ont pas
|
||||
Il est possible que nous n’ayons pas répondu à toutes vos questions dans les
|
||||
parties précédentes. La FAQ regroupe certaines interrogations qui n’ont pas
|
||||
trouvé leur réponse ailleurs.
|
||||
|
||||
## C'est quoi ce `/i` à la fin de l'URL ?
|
||||
## C’est quoi ce `/i` à la fin de l’URL ?
|
||||
|
||||
Bien entendu, le ```/i``` n'est pas là pour faire joli ! Il s'agit d'une
|
||||
Bien entendu, le ```/i``` n’est pas là pour faire joli ! Il s’agit d’une
|
||||
question de performances et de praticité :
|
||||
|
||||
* Cela permet de servir les icônes, images, styles, scripts sans
|
||||
cookie. Sans cela, ces fichiers seraient souvent re-téléchargés, en
|
||||
particulier lorsque le formulaire de connexion est utilisé. De plus, les
|
||||
requêtes vers ces ressources seraient plus lourdes.
|
||||
* La racine publique ```./p/``` peut être servie sans restriction d'accès
|
||||
* La racine publique ```./p/``` peut être servie sans restriction d’accès
|
||||
HTTP (qui peut avantageusement être mise en place dans ```./p/i/```).
|
||||
* Cela permet d'éviter des problèmes pour des fichiers qui doivent être
|
||||
* Cela permet d’éviter des problèmes pour des fichiers qui doivent être
|
||||
publics pour bien fonctionner, comme ```favicon.ico```, ```robots.txt```, etc.
|
||||
* Cela permet aussi d'avoir un logo FreshRSS plutôt qu'une page blanche pour
|
||||
accueillir l'utilisateur par exemple dans le cas de la restriction d'accès
|
||||
HTTP ou lors de l'attente du chargement plus lourd du reste de
|
||||
l'interface.
|
||||
* Cela permet aussi d’avoir un logo FreshRSS plutôt qu’une page blanche pour
|
||||
accueillir l’utilisateur par exemple dans le cas de la restriction d’accès
|
||||
HTTP ou lors de l’attente du chargement plus lourd du reste de
|
||||
l’interface.
|
||||
|
||||
## Pourquoi le ```robots.txt``` se trouve dans un sous-répertoire ?
|
||||
|
||||
Afin d'améliorer la sécurité, FreshRSS est découpé en deux parties : une
|
||||
Afin d’améliorer la sécurité, FreshRSS est découpé en deux parties : une
|
||||
partie publique (le répertoire ```./p```) et une partie privée (tout le
|
||||
reste !). Le ```robots.txt``` se trouve donc dans le sous-répertoire
|
||||
```./p```.
|
||||
|
@ -35,57 +35,57 @@ partie publique ne soit accessible par un navigateur web. De cette manière
|
|||
```robots.txt``` se trouve bien à la racine du site :
|
||||
<https://demo.freshrss.org/robots.txt>
|
||||
|
||||
L'explication est la même pour les fichiers ```favicon.ico``` et
|
||||
L’explication est la même pour les fichiers ```favicon.ico``` et
|
||||
```.htaccess```.
|
||||
|
||||
## Pourquoi j'ai des erreurs quand j'essaye d'enregistrer un flux ?
|
||||
## Pourquoi j’ai des erreurs quand j’essaye d’enregistrer un flux ?
|
||||
|
||||
Il peut y avoir différentes origines à ce problème. Le flux peut avoir une
|
||||
syntaxe invalide, il peut ne pas être reconnu par la bibliothèque SimplePie,
|
||||
l'hébergement peut avoir des problèmes, FreshRSS peut être boggué. Il faut
|
||||
l’hébergement peut avoir des problèmes, FreshRSS peut être boggué. Il faut
|
||||
dans un premier temps déterminer la cause du problème.Voici la liste des
|
||||
étapes à suivre pour la déterminer :
|
||||
|
||||
1. __Vérifier la validité du flux__ grâce à l'[outil en ligne du
|
||||
1. __Vérifier la validité du flux__ grâce à l’[outil en ligne du
|
||||
W3C](https://validator.w3.org/feed/ "Validateur en ligne de flux RSS et
|
||||
Atom"). Si ça ne fonctionne pas, nous ne pouvons rien faire.
|
||||
1. __Vérifier la reconnaissance par SimplePie__ grâce à l'[outil en ligne de
|
||||
1. __Vérifier la reconnaissance par SimplePie__ grâce à l’[outil en ligne de
|
||||
SimplePie](https://simplepie.org/demo/ "Démo officielle de
|
||||
SimplePie"). Si ça ne fonctionne pas, nous ne pouvons rien faire.
|
||||
1. __Vérifier l'intégration dans FreshRSS__ grâce à la
|
||||
1. __Vérifier l’intégration dans FreshRSS__ grâce à la
|
||||
[démo](https://demo.freshrss.org "Démo officielle de FreshRSS"). Si ça ne
|
||||
fonctionne pas, il faut [créer un ticket sur
|
||||
Github](https://github.com/FreshRSS/FreshRSS/issues/new "Créer un ticket
|
||||
pour FreshRSS") pour que l'on puisse regarder ce qui se passe. Si ça
|
||||
fonctionne, il y a probablement un problème avec l'hébergement.
|
||||
pour FreshRSS") pour que l’on puisse regarder ce qui se passe. Si ça
|
||||
fonctionne, il y a probablement un problème avec l’hébergement.
|
||||
|
||||
## Comment changer un mot de passe oublié ?
|
||||
|
||||
Depuis la version
|
||||
[1.10.0](https://github.com/FreshRSS/FreshRSS/releases/tag/1.10.0),
|
||||
l'administrateur peut modifier le mot de passe d'un utilisateur depuis
|
||||
l'interface. Cette interface est disponible dans le menu ```Administration →
|
||||
Gestion des utilisateurs```. Il suffit de sélectionner l'utilisateur, de
|
||||
l’administrateur peut modifier le mot de passe d’un utilisateur depuis
|
||||
l’interface. Cette interface est disponible dans le menu ```Administration →
|
||||
Gestion des utilisateurs```. Il suffit de sélectionner l’utilisateur, de
|
||||
saisir un mot de passe et de valider.
|
||||
|
||||
Depuis la version
|
||||
[1.8.0](https://github.com/FreshRSS/FreshRSS/releases/tag/1.8.0),
|
||||
l'administrateur peut modifier le mot de passe d'un utilisateur depuis un
|
||||
l’administrateur peut modifier le mot de passe d’un utilisateur depuis un
|
||||
terminal. Il est bon de noter que celui-ci doit avoir un accès à PHP en
|
||||
ligne de commande. Pour cela, il suffit d'ouvrir son terminal et de saisir
|
||||
ligne de commande. Pour cela, il suffit d’ouvrir son terminal et de saisir
|
||||
la commande suivante :
|
||||
```sh
|
||||
./cli/update_user.php --user <username> --password <password>
|
||||
```
|
||||
Pour plus d'information à ce sujet, il existe la [documentation
|
||||
Pour plus d’information à ce sujet, il existe la [documentation
|
||||
dédiée](../../cli/README.md).
|
||||
|
||||
## Gérer les permissions sous SELinux
|
||||
|
||||
Certaines distributions Linux comme Fedora ou RedHat Enterprise Linux (RHEL)
|
||||
activent par défaut le système SELinux. Celui-ci permet de gérer des
|
||||
permissions au niveau des processus. Lors de l'installation de FreshRSS,
|
||||
l'étape 2 procède à la vérification des droits sur certains répertoires, il
|
||||
permissions au niveau des processus. Lors de l’installation de FreshRSS,
|
||||
l’étape 2 procède à la vérification des droits sur certains répertoires, il
|
||||
faut donc exécuter la commande suivante en tant que root:
|
||||
```sh
|
||||
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/FreshRSS/data(/.*)?'
|
||||
|
@ -94,10 +94,10 @@ restorecon -Rv /usr/share/FreshRSS/data
|
|||
|
||||
## Pourquoi y a-t-il une page blanche lorsque je configure les options de partage ?
|
||||
|
||||
Le mot `sharing` dans l'URL est un mot déclencheur pour certaines règles des
|
||||
Le mot `sharing` dans l’URL est un mot déclencheur pour certaines règles des
|
||||
bloqueurs de publicités. À partir de la version 1.16, `sharing` a été
|
||||
remplacé par `integration` dans l'URL posant problème tout en conservant
|
||||
exactement la même dénomination à travers l'application.
|
||||
remplacé par `integration` dans l’URL posant problème tout en conservant
|
||||
exactement la même dénomination à travers l’application.
|
||||
|
||||
Si vous utilisez une version antérieure à 1.16, vous pouvez désactiver votre
|
||||
bloqueur de publicité pour FreshRSS ou vous pouvez ajouter une règle pour
|
||||
|
@ -105,7 +105,7 @@ permettre la consultation de la page de configuration « partage ».
|
|||
|
||||
Exemples avec _uBlock_ :
|
||||
|
||||
* Ajoutez votre instance FreshRSS à la liste blanche de en l'ajoutant dans
|
||||
* Ajoutez votre instance FreshRSS à la liste blanche de en l’ajoutant dans
|
||||
_uBlock > Ouvrir le tableau de bord > Liste blanche_.
|
||||
*-* Autorisez votre instance FreshRSS à appeler la page de configuration
|
||||
`sharing` en ajoutant la règle `*sharing,domain=~votredomaine.com` dans
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -26,7 +26,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./contributing.md:4
|
||||
msgid ""
|
||||
"Do you want to ask us some questions? Do you want to discuss with us? Don't "
|
||||
"Do you want to ask us some questions? Do you want to discuss with us? Don’t "
|
||||
"hesitate to subscribe to our mailing lists!"
|
||||
msgstr ""
|
||||
|
||||
|
@ -54,7 +54,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./contributing.md:11
|
||||
msgid ""
|
||||
"Have you found a bug? Don't panic, here are some steps to report it with "
|
||||
"Have you found a bug? Don’t panic, here are some steps to report it with "
|
||||
"ease:"
|
||||
msgstr ""
|
||||
|
||||
|
@ -62,21 +62,21 @@ msgstr ""
|
|||
#: en/./contributing.md:15
|
||||
msgid ""
|
||||
"Search for it on [the bug "
|
||||
"tracker](https://github.com/FreshRSS/FreshRSS/issues) (don't forget to use "
|
||||
"tracker](https://github.com/FreshRSS/FreshRSS/issues) (don’t forget to use "
|
||||
"the search bar)."
|
||||
msgstr ""
|
||||
|
||||
#. type: Bullet: '2. '
|
||||
#: en/./contributing.md:15
|
||||
msgid ""
|
||||
"If you find a similar bug, don't hesitate to post a comment to add more "
|
||||
"If you find a similar bug, don’t hesitate to post a comment to add more "
|
||||
"importance to the related ticket."
|
||||
msgstr ""
|
||||
|
||||
#. type: Bullet: '3. '
|
||||
#: en/./contributing.md:15
|
||||
msgid ""
|
||||
"If you didn't find it, [open a new "
|
||||
"If you didn’t find it, [open a new "
|
||||
"ticket](https://github.com/FreshRSS/FreshRSS/issues/new)."
|
||||
msgstr ""
|
||||
|
||||
|
@ -142,7 +142,7 @@ msgstr ""
|
|||
#. type: Bullet: '1. '
|
||||
#: en/./contributing.md:36
|
||||
msgid ""
|
||||
"Be sure the bug is associated with a ticket and indicate that you'll work on "
|
||||
"Be sure the bug is associated with a ticket and indicate that you’ll work on "
|
||||
"it."
|
||||
msgstr ""
|
||||
|
||||
|
@ -181,7 +181,7 @@ msgstr ""
|
|||
#: en/./contributing.md:40
|
||||
#, no-wrap
|
||||
msgid ""
|
||||
"**Tip:** if you're searching for easy-to-fix bugs, please have a look at the "
|
||||
"**Tip:** if you’re searching for easy-to-fix bugs, please have a look at the "
|
||||
"\"[good first "
|
||||
"issue](https://github.com/FreshRSS/FreshRSS/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22)\" "
|
||||
"ticket label.\n"
|
||||
|
@ -196,7 +196,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./contributing.md:44
|
||||
msgid ""
|
||||
"You have great ideas, yes! Don't be shy and open [a new "
|
||||
"You have great ideas, yes! Don’t be shy and open [a new "
|
||||
"ticket](https://github.com/FreshRSS/FreshRSS/issues/new) on our bug tracker "
|
||||
"to ask if we can implement it. The greatest ideas often come from the shyest "
|
||||
"suggestions!"
|
||||
|
@ -204,7 +204,7 @@ msgstr ""
|
|||
|
||||
#. type: Plain text
|
||||
#: en/./contributing.md:46
|
||||
msgid "If your idea is nice, we'll have a look at it."
|
||||
msgid "If your idea is nice, we’ll have a look at it."
|
||||
msgstr ""
|
||||
|
||||
#. type: Title ##
|
||||
|
@ -228,7 +228,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./contributing.md:54
|
||||
msgid ""
|
||||
"We're working on a better way to handle internationalization, but don't "
|
||||
"We’re working on a better way to handle internationalization, but don’t "
|
||||
"hesitate to suggest any ideas!"
|
||||
msgstr ""
|
||||
|
||||
|
@ -257,7 +257,7 @@ msgstr ""
|
|||
#: en/./developers/01_First_steps.md:4
|
||||
msgid ""
|
||||
"FreshRSS is built with PHP and uses a homemade framework, Minz. The "
|
||||
"dependencies are directly included in the source code, so you don't need "
|
||||
"dependencies are directly included in the source code, so you don’t need "
|
||||
"Composer."
|
||||
msgstr ""
|
||||
|
||||
|
@ -267,14 +267,14 @@ msgid ""
|
|||
"There are various ways to configure your development environment. The "
|
||||
"easiest and most supported method is based on Docker, which is the solution "
|
||||
"documented below. If you already have a working PHP environment, you "
|
||||
"probably don't need it."
|
||||
"probably don’t need it."
|
||||
msgstr ""
|
||||
|
||||
#. type: Plain text
|
||||
#: en/./developers/01_First_steps.md:8
|
||||
msgid ""
|
||||
"We assume here that you use a GNU/Linux distribution, capable of running "
|
||||
"Docker. Otherwise, you'll have to adapt the commands accordingly."
|
||||
"Docker. Otherwise, you’ll have to adapt the commands accordingly."
|
||||
msgstr ""
|
||||
|
||||
#. type: Plain text
|
||||
|
@ -282,7 +282,7 @@ msgstr ""
|
|||
msgid ""
|
||||
"The commands that follow have to be executed in a console. They start by `$` "
|
||||
"when commands need to be executed as normal user, and by `#` when they need "
|
||||
"to be executed as root user. You don't have to type these characters. A path "
|
||||
"to be executed as root user. You don’t have to type these characters. A path "
|
||||
"may be indicated before these characters to help you identify where they "
|
||||
"need to be executed. For instance, `app$ echo 'Hello World'` indicates that "
|
||||
"you have to execute `echo` command in the `app/` directory."
|
||||
|
@ -297,7 +297,7 @@ msgstr ""
|
|||
|
||||
#. type: Plain text
|
||||
#: en/./developers/01_First_steps.md:14
|
||||
msgid "Once you're done, clone the repository with:"
|
||||
msgid "Once you’re done, clone the repository with:"
|
||||
msgstr ""
|
||||
|
||||
#. type: Code fence info string
|
||||
|
@ -337,7 +337,7 @@ msgstr ""
|
|||
#: en/./developers/01_First_steps.md:29
|
||||
msgid ""
|
||||
"This might take some time while Docker downloads the image. If your user "
|
||||
"isn't in the `docker` group, you'll need to prepend the command with `sudo`."
|
||||
"isn’t in the `docker` group, you’ll need to prepend the command with `sudo`."
|
||||
msgstr ""
|
||||
|
||||
#. type: Plain text
|
||||
|
@ -366,7 +366,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./developers/01_First_steps.md:39
|
||||
msgid ""
|
||||
"If you're interested in the configuration, the `make` commands are defined "
|
||||
"If you’re interested in the configuration, the `make` commands are defined "
|
||||
"in the [`Makefile`](/Makefile)."
|
||||
msgstr ""
|
||||
|
||||
|
@ -448,15 +448,15 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./developers/01_First_steps.md:69
|
||||
msgid ""
|
||||
"If you want to contribute to the source code, it's important to follow the "
|
||||
"project's coding style. The actual code doesn't always follow it throughout "
|
||||
"If you want to contribute to the source code, it’s important to follow the "
|
||||
"project’s coding style. The actual code doesn’t always follow it throughout "
|
||||
"the project, but we should fix it every time an opportunity presents itself."
|
||||
msgstr ""
|
||||
|
||||
#. type: Plain text
|
||||
#: en/./developers/01_First_steps.md:71
|
||||
msgid ""
|
||||
"Contributions which don't follow the coding style will be rejected as long "
|
||||
"Contributions which don’t follow the coding style will be rejected as long "
|
||||
"as the coding style is not fixed."
|
||||
msgstr ""
|
||||
|
||||
|
@ -596,8 +596,8 @@ msgstr ""
|
|||
#: en/./developers/01_First_steps.md:122
|
||||
msgid ""
|
||||
"There should be no spaces in between brackets. There should be no spaces "
|
||||
"before the opening bracket, except if it's after a keyword. There shouldn't "
|
||||
"be any spaces after the closing bracket, except if it's followed by a curly "
|
||||
"before the opening bracket, except if it’s after a keyword. There shouldn’t "
|
||||
"be any spaces after the closing bracket, except if it’s followed by a curly "
|
||||
"bracket."
|
||||
msgstr ""
|
||||
|
||||
|
@ -624,7 +624,7 @@ msgstr ""
|
|||
#: en/./developers/01_First_steps.md:136
|
||||
msgid ""
|
||||
"It happens most of the time in Javascript files. When there are chained "
|
||||
"functions with closures and callback functions, it's hard to understand the "
|
||||
"functions with closures and callback functions, it’s hard to understand the "
|
||||
"code if not properly formatted. In those cases, we add a new indent level "
|
||||
"for the complete instruction and reset the indent for a new instruction on "
|
||||
"the same level."
|
||||
|
@ -840,19 +840,19 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./developers/02_Github.md:4
|
||||
msgid ""
|
||||
"Despite the care given to FreshRSS, it's still possible that bugs occur. The "
|
||||
"Despite the care given to FreshRSS, it’s still possible that bugs occur. The "
|
||||
"project is young and development is dynamic, so it can be corrected "
|
||||
"quickly. You might also have a feature in mind that doesn't yet "
|
||||
"quickly. You might also have a feature in mind that does not yet "
|
||||
"exist. Regardless whether your idea seems silly, far-fetched, useless or too "
|
||||
"specific, please don't hesitate to propose it to us! \"Ideas in the air\" "
|
||||
"often find an attentive ear. It's new external perspectives that make the "
|
||||
"specific, please don’t hesitate to propose it to us! \"Ideas in the air\" "
|
||||
"often find an attentive ear. It’s new external perspectives that make the "
|
||||
"project evolve the most."
|
||||
msgstr ""
|
||||
|
||||
#. type: Plain text
|
||||
#: en/./developers/02_Github.md:6
|
||||
msgid ""
|
||||
"If you're convinced that you should be heard, here's how you can go about "
|
||||
"If you’re convinced that you should be heard, here’s how you can go about "
|
||||
"it."
|
||||
msgstr ""
|
||||
|
||||
|
@ -867,7 +867,7 @@ msgstr ""
|
|||
msgid ""
|
||||
"GitHub is the ideal platform to submit your requests. It allows us to "
|
||||
"discuss a problem or suggestion with others and it often generates new "
|
||||
"ideas. Let's not neglect this \"social\" aspect!"
|
||||
"ideas. Let’s not neglect this \"social\" aspect!"
|
||||
msgstr ""
|
||||
|
||||
#. type: Bullet: ' 1. '
|
||||
|
@ -878,7 +878,7 @@ msgstr ""
|
|||
#. type: Bullet: ' 2. '
|
||||
#: en/./developers/02_Github.md:16
|
||||
msgid ""
|
||||
"Start by checking if a similar request hasn't already been made. If so, "
|
||||
"Start by checking if a similar request hasn’t already been made. If so, "
|
||||
"please feel free to add your voice to the request."
|
||||
msgstr ""
|
||||
|
||||
|
@ -892,7 +892,7 @@ msgstr ""
|
|||
#. type: Bullet: ' 4. '
|
||||
#: en/./developers/02_Github.md:16
|
||||
msgid ""
|
||||
"Finally, write your request. If you're fluent in English, it's the preferred "
|
||||
"Finally, write your request. If you’re fluent in English, it’s the preferred "
|
||||
"language because it allows for discussion with the largest number of people."
|
||||
msgstr ""
|
||||
|
||||
|
@ -956,13 +956,13 @@ msgstr ""
|
|||
|
||||
#. type: Bullet: '* '
|
||||
#: en/./developers/02_Github.md:39
|
||||
msgid "**Pay attention to spelling**. Even if it's not always easy, try your best!"
|
||||
msgid "**Pay attention to spelling**. Even if it’s not always easy, try your best!"
|
||||
msgstr ""
|
||||
|
||||
#. type: Bullet: '* '
|
||||
#: en/./developers/02_Github.md:39
|
||||
msgid ""
|
||||
"**Give an explicit title to your request**, even if it's a bit long. This "
|
||||
"**Give an explicit title to your request**, even if it’s a bit long. This "
|
||||
"not only helps us understand your request, but also to find your ticket "
|
||||
"later."
|
||||
msgstr ""
|
||||
|
@ -971,8 +971,8 @@ msgstr ""
|
|||
#: en/./developers/02_Github.md:39
|
||||
msgid ""
|
||||
"**One request = one ticket.** You may have lots of ideas while being afraid "
|
||||
"to spam the bug manager: it doesn't matter. It's better to have a few too "
|
||||
"many tickets than too many requests in one. We'll close and consolidate "
|
||||
"to spam the bug manager: it does’nt matter. It’s better to have a few too "
|
||||
"many tickets than too many requests in one. We’ll close and consolidate "
|
||||
"requests when possible."
|
||||
msgstr ""
|
||||
|
||||
|
@ -988,7 +988,7 @@ msgstr ""
|
|||
#. type: Bullet: '* '
|
||||
#: en/./developers/02_Github.md:39
|
||||
msgid ""
|
||||
"If you can't find the log files, specify it in your ticket so we know you've "
|
||||
"If you can’t find the log files, specify it in your ticket so we know you’ve "
|
||||
"already searched."
|
||||
msgstr ""
|
||||
|
||||
|
@ -1009,7 +1009,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./developers/02_Github.md:41
|
||||
msgid ""
|
||||
"In addition, when facing a bug, you're encouraged to follow this message "
|
||||
"In addition, when facing a bug, you’re encouraged to follow this message "
|
||||
"format (from the [Sam & Max "
|
||||
"website](http://sametmax.com/template-de-demande-daide-en-informatique/):"
|
||||
msgstr ""
|
||||
|
@ -1017,7 +1017,7 @@ msgstr ""
|
|||
#. type: Title ###
|
||||
#: en/./developers/02_Github.md:42
|
||||
#, no-wrap
|
||||
msgid "What's my goal?"
|
||||
msgid "What’s my goal?"
|
||||
msgstr ""
|
||||
|
||||
#. type: Plain text
|
||||
|
@ -1045,7 +1045,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./developers/02_Github.md:53
|
||||
msgid ""
|
||||
"The bug: what you see that shouldn't have happened. Here you can provide the "
|
||||
"The bug: what you see that shouldn’t have happened. Here you can provide the "
|
||||
"logs."
|
||||
msgstr ""
|
||||
|
||||
|
@ -1093,7 +1093,7 @@ msgstr ""
|
|||
|
||||
#. type: Bullet: ' 5. '
|
||||
#: en/./developers/02_Github.md:67
|
||||
msgid "Which distribution runs on the server? And... which version?"
|
||||
msgid "Which distribution runs on the server? And… which version?"
|
||||
msgstr ""
|
||||
|
||||
#. type: Title #
|
||||
|
@ -1115,7 +1115,7 @@ msgstr ""
|
|||
|
||||
#. type: Bullet: '* '
|
||||
#: en/./developers/02_Github.md:77
|
||||
msgid "[GitHub's blog post](https://github.com/blog/120-new-to-git)"
|
||||
msgid "[GitHub’s blog post](https://github.com/blog/120-new-to-git)"
|
||||
msgstr ""
|
||||
|
||||
#. type: Bullet: '* '
|
||||
|
@ -1414,7 +1414,7 @@ msgid ""
|
|||
"(the PHP framework on which FreshRSS is based). Unfortunately, this "
|
||||
"documentation does not yet exist. In a few words, here are the main things "
|
||||
"you should know. It is not necessary to read all the chapters in this "
|
||||
"section if you don't need to use a feature in your extension (if you don't "
|
||||
"section if you don’t need to use a feature in your extension (if you don’t "
|
||||
"need to translate your extension, no need to know more about the "
|
||||
"`Minz_Translate` module for example)."
|
||||
msgstr ""
|
||||
|
@ -1796,7 +1796,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./developers/03_Backend/05_Extensions.md:210
|
||||
msgid ""
|
||||
"It is common (and that's an understatement) to want to show some text to the "
|
||||
"It is common (and that’s an understatement) to want to show some text to the "
|
||||
"user. In the previous example, for example, we display feedback to the user "
|
||||
"based on the result of form validation. The problem is that FreshRSS has "
|
||||
"users of different nationalities. It is therefore necessary to be able to "
|
||||
|
@ -1858,8 +1858,8 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./developers/03_Backend/05_Extensions.md:224
|
||||
msgid ""
|
||||
"The translation files are quite simple: it's only a matter of returning a "
|
||||
"PHP table containing the translations. As an example, here's an extract from "
|
||||
"The translation files are quite simple: it’s only a matter of returning a "
|
||||
"PHP table containing the translations. As an example, here’s an extract from "
|
||||
"`app/i18n/fr/gen.php`:"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1922,7 +1922,7 @@ msgstr ""
|
|||
msgid ""
|
||||
"There is a small special case that sometimes makes life easier: the `_` "
|
||||
"identifier. This must necessarily be present at the end of the chain and "
|
||||
"gives a value to the higher-level identifier. It's pretty hard to explain "
|
||||
"gives a value to the higher-level identifier. It’s pretty hard to explain "
|
||||
"but very simple to understand. In the example given above, a `_` is "
|
||||
"associated with the value `FreshRSS`: this means that there is no need to "
|
||||
"write `_t('gen.freshrss._')` but `_t('gen.freshrss')` suffices."
|
||||
|
@ -1943,8 +1943,8 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./developers/03_Backend/05_Extensions.md:265
|
||||
msgid ""
|
||||
"Here we are! We've talked about the most useful features of Minz and how to "
|
||||
"run FreshRSS correctly and it's about time to address the extensions "
|
||||
"Here we are! We’ve talked about the most useful features of Minz and how to "
|
||||
"run FreshRSS correctly and it’s about time to address the extensions "
|
||||
"themselves."
|
||||
msgstr ""
|
||||
|
||||
|
@ -2097,7 +2097,7 @@ msgstr ""
|
|||
#. type: Bullet: '* '
|
||||
#: en/./developers/03_Backend/05_Extensions.md:313
|
||||
msgid ""
|
||||
"`author`: your name, your e-mail address ... but there is no specific format "
|
||||
"`author`: your name, your e-mail address … but there is no specific format "
|
||||
"to adopt"
|
||||
msgstr ""
|
||||
|
||||
|
@ -2296,7 +2296,7 @@ msgstr ""
|
|||
msgid ""
|
||||
"`check_url_before_add` (`function($url) -> Url | null`): will be executed "
|
||||
"every time a URL is added. The URL itself will be passed as parameter. This "
|
||||
"way a website known to have feeds which doesn't advertise it in the header "
|
||||
"way a website known to have feeds which does not advertise it in the header "
|
||||
"can still be automatically supported."
|
||||
msgstr ""
|
||||
|
||||
|
@ -2408,7 +2408,7 @@ msgstr ""
|
|||
#: en/./developers/03_Running_tests.md:4
|
||||
msgid ""
|
||||
"FreshRSS is tested with [PHPUnit](https://phpunit.de/). No code should be "
|
||||
"merged in `edge` if the tests don't pass."
|
||||
"merged in `edge` if the tests don’t pass."
|
||||
msgstr ""
|
||||
|
||||
#. type: Title ##
|
||||
|
@ -2442,7 +2442,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./developers/03_Running_tests.md:16
|
||||
msgid ""
|
||||
"Then, it executes PHPUnit in a Docker container. If you don't use Docker, "
|
||||
"Then, it executes PHPUnit in a Docker container. If you don’t use Docker, "
|
||||
"you can run the command directly with:"
|
||||
msgstr ""
|
||||
|
||||
|
@ -2464,13 +2464,13 @@ msgid ""
|
|||
"Tests are automatically run when you open a pull request on GitHub. It is "
|
||||
"done with [Travis CI](https://travis-ci.org/FreshRSS/FreshRSS/). This is "
|
||||
"done to ensure there is no regressions in your code. We cannot merge a PR if "
|
||||
"the tests fail so we'll ask you to fix bugs before to review your code."
|
||||
"the tests fail so we will ask you to fix bugs before to review your code."
|
||||
msgstr ""
|
||||
|
||||
#. type: Plain text
|
||||
#: en/./developers/03_Running_tests.md:25
|
||||
msgid ""
|
||||
"If you're interested in, you can take a look at [the configuration "
|
||||
"If you’re interested in, you can take a look at [the configuration "
|
||||
"file](https://github.com/FreshRSS/FreshRSS/blob/edge/.travis.yml)."
|
||||
msgstr ""
|
||||
|
||||
|
@ -2519,7 +2519,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./developers/04_Pull_requests.md:4
|
||||
msgid ""
|
||||
"So you want to propose a patch to the community? It's time to open a [pull "
|
||||
"So you want to propose a patch to the community? It’s time to open a [pull "
|
||||
"request](https://github.com/FreshRSS/FreshRSS/pulls)!"
|
||||
msgstr ""
|
||||
|
||||
|
@ -2529,7 +2529,7 @@ msgid ""
|
|||
"When you open a PR, your message will be prefilled with a message based on "
|
||||
"[a "
|
||||
"template](https://github.com/FreshRSS/FreshRSS/blob/edge/docs/pull_request_template.md). "
|
||||
"It contains a checklist to make sure you didn't forget anything. It is very "
|
||||
"It contains a checklist to make sure you didn’t forget anything. It is very "
|
||||
"important to verify you did everything mentioned so documentation is "
|
||||
"up-to-date, the commit history stays clear and the code is always stable."
|
||||
msgstr ""
|
||||
|
@ -2556,8 +2556,8 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./developers/04_Pull_requests.md:14
|
||||
msgid ""
|
||||
"If you have any doubt, please let us know and we'll help you! We all began "
|
||||
"with Git one day and it's not an easy thing to work with."
|
||||
"If you have any doubt, please let us know and we’ll help you! We all began "
|
||||
"with Git one day and it’s not an easy thing to work with."
|
||||
msgstr ""
|
||||
|
||||
#. type: Title ###
|
||||
|
@ -2571,7 +2571,7 @@ msgstr ""
|
|||
msgid ""
|
||||
"Rebasing is the cleanest method because the Git history will be completely "
|
||||
"linear and consequently easier to read and navigate. It might also be more "
|
||||
"difficult if you're not at ease with Git since conflicts are harder to "
|
||||
"difficult if you’re not at ease with Git since conflicts are harder to "
|
||||
"resolve."
|
||||
msgstr ""
|
||||
|
||||
|
@ -2616,7 +2616,7 @@ msgstr ""
|
|||
msgid ""
|
||||
"If you prefer, you can simply merge `edge` into your own branch. Conflicts "
|
||||
"might be easier to resolve, but your Git history will be less "
|
||||
"readable. Don't worry, we'll take care of it before merging your PR back "
|
||||
"readable. Don’t worry, we will take care of it before merging your PR back "
|
||||
"into `edge`."
|
||||
msgstr ""
|
||||
|
||||
|
@ -2644,7 +2644,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./developers/04_Pull_requests.md:48
|
||||
msgid ""
|
||||
"It's important to have proper commit messages in order to facilitate later "
|
||||
"It’s important to have proper commit messages in order to facilitate later "
|
||||
"debugging, so please read the following advice. Commit messages should "
|
||||
"explain the choices made in the past (the “why?”)"
|
||||
msgstr ""
|
||||
|
@ -2653,7 +2653,7 @@ msgstr ""
|
|||
#: en/./developers/04_Pull_requests.md:50
|
||||
msgid ""
|
||||
"The first line should start with a verb (e.g., \"Add\") and explain the "
|
||||
"objective of the commit in few words. It's usually less than 50 characters "
|
||||
"objective of the commit in few words. It’s usually less than 50 characters "
|
||||
"so it remains concise. You can consider this line the subject of your "
|
||||
"commit. Think of it as the second part of a sentence that starts with the "
|
||||
"words \"This commit will.\""
|
||||
|
@ -2667,7 +2667,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./developers/04_Pull_requests.md:54
|
||||
msgid ""
|
||||
"Then, insert a blank line, and start to write the body. It's usually wrapped "
|
||||
"Then, insert a blank line, and start to write the body. It’s usually wrapped "
|
||||
"at 72 characters, but you are pretty free in the tone of the message. The "
|
||||
"body is the place where you can clarify the context of your patch. For "
|
||||
"instance, you can explain what you were doing when you identified a bug, or "
|
||||
|
@ -2699,7 +2699,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./developers/04_Pull_requests.md:62
|
||||
msgid ""
|
||||
"FreshRSS has few tests for now, but we're working on it. We added this point "
|
||||
"FreshRSS has few tests for now, but we’re working on it. We added this point "
|
||||
"to the checklist to help us to write more tests, and we would really "
|
||||
"appreciate it if you wrote a test that ensures your patch is working."
|
||||
msgstr ""
|
||||
|
@ -2714,7 +2714,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./developers/04_Pull_requests.md:66
|
||||
msgid ""
|
||||
"You'll find more information on how to run tests [in this "
|
||||
"You’ll find more information on how to run tests [in this "
|
||||
"document](03_Running_tests.md)."
|
||||
msgstr ""
|
||||
|
||||
|
@ -2722,7 +2722,7 @@ msgstr ""
|
|||
#: en/./developers/04_Pull_requests.md:68
|
||||
msgid ""
|
||||
"Feel free to ask us for assistance. Not everything will be easy to test, so "
|
||||
"don't spend too much time on this."
|
||||
"don’t spend too much time on this."
|
||||
msgstr ""
|
||||
|
||||
#. type: Title ##
|
||||
|
@ -2735,15 +2735,15 @@ msgstr ""
|
|||
#: en/./developers/04_Pull_requests.md:72
|
||||
msgid ""
|
||||
"A friendly project should have correct and complete documentation, so "
|
||||
"newcomers don't have to ask too many questions, and users can find answers "
|
||||
"newcomers don’t have to ask too many questions, and users can find answers "
|
||||
"to their problems. The documentation should not be written “later” or "
|
||||
"chances are it'll never be."
|
||||
"chances are it’ll never be."
|
||||
msgstr ""
|
||||
|
||||
#. type: Plain text
|
||||
#: en/./developers/04_Pull_requests.md:73
|
||||
msgid ""
|
||||
"Our documentation can still be improved quite a bit, so you're very welcome "
|
||||
"Our documentation can still be improved quite a bit, so you’re very welcome "
|
||||
"if you want to help."
|
||||
msgstr ""
|
||||
|
||||
|
@ -2756,7 +2756,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./developers/05_Release_new_version.md:4
|
||||
msgid ""
|
||||
"In order to get as much feedback as possible before a release, it's "
|
||||
"In order to get as much feedback as possible before a release, it’s "
|
||||
"preferable to announce it on GitHub by creating a dedicated ticket ([see "
|
||||
"examples] "
|
||||
"(https://github.com/FreshRSS/FreshRSS/search?utf8=%E2%9C%93&q=Call+for+testing&type=Issues)). "
|
||||
|
@ -2765,7 +2765,7 @@ msgstr ""
|
|||
|
||||
#. type: Plain text
|
||||
#: en/./developers/05_Release_new_version.md:6
|
||||
msgid "It's also recommended to make the announcement on mailing@freshrss.org."
|
||||
msgid "It’s also recommended to make the announcement on mailing@freshrss.org."
|
||||
msgstr ""
|
||||
|
||||
#. type: Title #
|
||||
|
@ -2819,7 +2819,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./developers/05_Release_new_version.md:30
|
||||
msgid ""
|
||||
"It's important to update update.freshrss.org since this is the default "
|
||||
"It’s important to update update.freshrss.org since this is the default "
|
||||
"service for automatic FreshRSS updates."
|
||||
msgstr ""
|
||||
|
||||
|
@ -2850,7 +2850,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./developers/05_Release_new_version.md:38
|
||||
msgid ""
|
||||
"In order to write a new script, it's better to copy/paste the last version "
|
||||
"In order to write a new script, it’s better to copy/paste the last version "
|
||||
"or to start from `update_to_dev.php`. The first thing to do is to define the "
|
||||
"URL from which the FreshRSS package will be downloaded (`PACKAGE_URL`). The "
|
||||
"URL is in the form of "
|
||||
|
@ -2910,14 +2910,14 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./developers/05_Release_new_version.md:50
|
||||
msgid ""
|
||||
"Once the script has been written and versioned, it's necessary to update the "
|
||||
"Once the script has been written and versioned, it’s necessary to update the "
|
||||
"`./versions.php' file which contains a mapping table indicating which "
|
||||
"versions are updated to which other versions."
|
||||
msgstr ""
|
||||
|
||||
#. type: Plain text
|
||||
#: en/./developers/05_Release_new_version.md:52
|
||||
msgid "Here's an example of a `versions.php` file:"
|
||||
msgid "Here’s an example of a `versions.php` file:"
|
||||
msgstr ""
|
||||
|
||||
#. type: Plain text
|
||||
|
@ -2929,7 +2929,7 @@ msgid ""
|
|||
"\t// STABLE\n"
|
||||
"\t'0.8.0' => '1.0.0',\n"
|
||||
"\t'0.8.1' => '1.0.0',\n"
|
||||
"\t'1.0.0' => '1.0.1', // doesn't exist (yet)\n"
|
||||
"\t'1.0.0' => '1.0.1', // does not exist (yet)\n"
|
||||
"\t// DEV\n"
|
||||
"\t'1.1.2-dev' => 'dev',\n"
|
||||
"\t'1.1.3-dev' => 'dev',\n"
|
||||
|
@ -2939,7 +2939,7 @@ msgstr ""
|
|||
|
||||
#. type: Plain text
|
||||
#: en/./developers/05_Release_new_version.md:68
|
||||
msgid "And here's how this table works:"
|
||||
msgid "And here’s how this table works:"
|
||||
msgstr ""
|
||||
|
||||
#. type: Bullet: '* '
|
||||
|
@ -2960,14 +2960,14 @@ msgstr ""
|
|||
#. type: Bullet: '* '
|
||||
#: en/./developers/05_Release_new_version.md:74
|
||||
msgid ""
|
||||
"it's possible to skip several versions at once, provided that the update "
|
||||
"it’s possible to skip several versions at once, provided that the update "
|
||||
"scripts support it;"
|
||||
msgstr ""
|
||||
|
||||
#. type: Bullet: '* '
|
||||
#: en/./developers/05_Release_new_version.md:74
|
||||
msgid ""
|
||||
"it's advisable to indicate the correspondence of the current version to its "
|
||||
"it’s advisable to indicate the correspondence of the current version to its "
|
||||
"potential future version by specifying that this version does not yet "
|
||||
"exist. As long as the corresponding script does not exist, nothing will "
|
||||
"happen."
|
||||
|
@ -2976,7 +2976,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./developers/05_Release_new_version.md:76
|
||||
msgid ""
|
||||
"It's **very strongly** recommended to keep this file organized according to "
|
||||
"It’s **very strongly** recommended to keep this file organized according to "
|
||||
"version numbers by separating stable and dev versions."
|
||||
msgstr ""
|
||||
|
||||
|
@ -2989,16 +2989,16 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./developers/05_Release_new_version.md:80
|
||||
msgid ""
|
||||
"Before updating update.freshrss.org, it's better to test with "
|
||||
"Before updating update.freshrss.org, it’s better to test with "
|
||||
"dev.update.freshrss.org, which corresponds to pre-production. So update "
|
||||
"dev.update.freshrss.org and change the `FRESHRSS_UPDATE_WEBSITE` URL of your "
|
||||
"FreshRSS instance. Start the update and check that it's running correctly."
|
||||
"FreshRSS instance. Start the update and check that it’s running correctly."
|
||||
msgstr ""
|
||||
|
||||
#. type: Plain text
|
||||
#: en/./developers/05_Release_new_version.md:82
|
||||
msgid ""
|
||||
"When you're satisfied, update update.freshrss.org with the new script, test "
|
||||
"When you’re satisfied, update update.freshrss.org with the new script, test "
|
||||
"it again, and then move on."
|
||||
msgstr ""
|
||||
|
||||
|
@ -3031,7 +3031,7 @@ msgstr ""
|
|||
|
||||
#. type: Plain text
|
||||
#: en/./developers/05_Release_new_version.md:93
|
||||
msgid "When everything's working, it's time to announce the release to the world!"
|
||||
msgid "When everything’s working, it’s time to announce the release to the world!"
|
||||
msgstr ""
|
||||
|
||||
#. type: Bullet: '* '
|
||||
|
@ -3196,7 +3196,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./users/02_First_steps.md:2
|
||||
msgid ""
|
||||
"Learning how to handle a new application is not always easy. We've tried to "
|
||||
"Learning how to handle a new application is not always easy. We’ve tried to "
|
||||
"make FreshRSS as intuitive as possible, but you might still need a little "
|
||||
"help to master the program."
|
||||
msgstr ""
|
||||
|
@ -3261,8 +3261,8 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./users/02_First_steps.md:18
|
||||
msgid ""
|
||||
"Now that you've mastered basic use, it's time to configure FreshRSS to "
|
||||
"improve your reading experience. It's highly configurable, so it's "
|
||||
"Now that you’ve mastered basic use, it’s time to configure FreshRSS to "
|
||||
"improve your reading experience. It’s highly configurable, so it’s "
|
||||
"recommended to play around with them to find a configuration that suits you "
|
||||
"well. Here are a few resources to help you improve your daily FreshRSS "
|
||||
"experience:"
|
||||
|
@ -3559,7 +3559,7 @@ msgstr ""
|
|||
#: en/./users/03_Main_view.md:92
|
||||
msgid ""
|
||||
"When using HTTP authentication, the syntax in the two previous sections is "
|
||||
"unusable. You'll need to provide your credentials to the scheduled "
|
||||
"unusable. You’ll need to provide your credentials to the scheduled "
|
||||
"task. **Note that this method is highly discouraged since it means that your "
|
||||
"credentials will be in plain sight!**"
|
||||
msgstr ""
|
||||
|
@ -3581,7 +3581,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./users/03_Main_view.md:100
|
||||
msgid ""
|
||||
"If you can't or don't want to use the automatic method, you can update "
|
||||
"If you can’t or don’t want to use the automatic method, you can update "
|
||||
"manually. There are two methods for updating all or some of the feeds."
|
||||
msgstr ""
|
||||
|
||||
|
@ -3642,7 +3642,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./users/03_Main_view.md:120
|
||||
msgid ""
|
||||
"When the number of articles stored by FreshRSS inevitably grows larger, it's "
|
||||
"When the number of articles stored by FreshRSS inevitably grows larger, it’s "
|
||||
"important to use efficient filters to display only a subset of the "
|
||||
"articles. There are several methods that filter with different "
|
||||
"criteria. Usually those methods can be combined."
|
||||
|
@ -3727,8 +3727,8 @@ msgstr ""
|
|||
#: en/./users/03_Main_view.md:144
|
||||
msgid ""
|
||||
"In version 0.7, attribute filters are available in the article display "
|
||||
"dropdown list. With this version, it's not possible to combine filters. For "
|
||||
"instance, it's not possible to display only read and favorite articles."
|
||||
"dropdown list. With this version, it’s not possible to combine filters. For "
|
||||
"instance, it’s not possible to display only read and favorite articles."
|
||||
msgstr ""
|
||||
|
||||
#. type: Plain text
|
||||
|
@ -3913,7 +3913,7 @@ msgstr ""
|
|||
#: en/./users/04_Subscriptions.md:16
|
||||
msgid ""
|
||||
"Drag the \"Subscribe\" button to your bookmark toolbar or right click and "
|
||||
"choose your browser's \"Bookmark link\" action."
|
||||
"choose your browser’s \"Bookmark link\" action."
|
||||
msgstr ""
|
||||
|
||||
#. type: Title #
|
||||
|
@ -3940,7 +3940,7 @@ msgid ""
|
|||
"FreshRSS is currently available in 14 languages. After confirming your "
|
||||
"choice, the interface will be displayed in your preferred language. "
|
||||
"Depending on the language chosen, parts of the interface may not be not "
|
||||
"translated yet. If you're willing to help translate the missing bits or "
|
||||
"translated yet. If you’re willing to help translate the missing bits or "
|
||||
"would like to add a new language, please take a look at how you can "
|
||||
"[contribute to the "
|
||||
"project](../contributing.md#contribute-to-internationalization-i18n)."
|
||||
|
@ -3949,7 +3949,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./users/05_Configuration.md:11
|
||||
msgid ""
|
||||
"Some parts of FreshRSS aren't translated and aren't intended to be "
|
||||
"Some parts of FreshRSS aren’t translated and aren’t intended to be "
|
||||
"translated either. For now, this includes the logs visible in the "
|
||||
"application as well as the log generated by automatic update scripts."
|
||||
msgstr ""
|
||||
|
@ -3970,7 +3970,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./users/05_Configuration.md:17
|
||||
msgid ""
|
||||
"There's no accounting for tastes, which is why FreshRSS offers eight "
|
||||
"There’s no accounting for tastes, which is why FreshRSS offers eight "
|
||||
"official themes:"
|
||||
msgstr ""
|
||||
|
||||
|
@ -4017,7 +4017,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./users/05_Configuration.md:28
|
||||
msgid ""
|
||||
"If you can't find any themes you like, it's always possible to [create your "
|
||||
"If you can’t find any themes you like, it’s always possible to [create your "
|
||||
"own](../developers/04_Frontend/02_Design.md)."
|
||||
msgstr ""
|
||||
|
||||
|
@ -4039,7 +4039,7 @@ msgstr ""
|
|||
#: en/./users/05_Configuration.md:34
|
||||
msgid ""
|
||||
"Some people prefer short lines of text, while others prefer to maximize the "
|
||||
"available screen space. To satisfy the maximum number of people, it's "
|
||||
"available screen space. To satisfy the maximum number of people, it’s "
|
||||
"possible to customize the width of the displayed content. There are four "
|
||||
"settings available:"
|
||||
msgstr ""
|
||||
|
@ -4090,7 +4090,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./users/05_Configuration.md:52
|
||||
msgid ""
|
||||
"If you disable every item in the top line, you'll still be able to see it "
|
||||
"If you disable every item in the top line, you’ll still be able to see it "
|
||||
"since it contains the feed name and the article title. But if you do the "
|
||||
"same thing for the bottom line, it will be empty."
|
||||
msgstr ""
|
||||
|
@ -4136,7 +4136,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./users/05_Configuration.md:66
|
||||
msgid ""
|
||||
"If you don't use those buttons because you never browse on mobile or because "
|
||||
"If you don’t use those buttons because you never browse on mobile or because "
|
||||
"you browse with gestures, you can disable them from the interface."
|
||||
msgstr ""
|
||||
|
||||
|
@ -4233,7 +4233,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./users/05_Configuration.md:102
|
||||
msgid ""
|
||||
"Of course, if you're not satisfied with the key mapping, you can change you "
|
||||
"Of course, if you’re not satisfied with the key mapping, you can change you "
|
||||
"configuration to fit your needs."
|
||||
msgstr ""
|
||||
|
||||
|
@ -4269,10 +4269,10 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./users/05_Configuration.md:112
|
||||
msgid ""
|
||||
"It's worth noting that the share article action has two levels. Once you "
|
||||
"It’s worth noting that the share article action has two levels. Once you "
|
||||
"press the shortcut, a menu containing all the share options opens. To "
|
||||
"choose one share option, you need to select it by its number. When there is "
|
||||
"only one option, it's selected automatically though."
|
||||
"only one option, it’s selected automatically though."
|
||||
msgstr ""
|
||||
|
||||
#. type: Plain text
|
||||
|
@ -4284,7 +4284,7 @@ msgstr ""
|
|||
#: en/./users/05_Configuration.md:117
|
||||
msgid ""
|
||||
"Be aware that there is no validation on the selected shortcuts. This means "
|
||||
"that if you assign a shortcut to more than one action, you'll end up with "
|
||||
"that if you assign a shortcut to more than one action, you’ll end up with "
|
||||
"some unexpected behavior."
|
||||
msgstr ""
|
||||
|
||||
|
@ -4401,7 +4401,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./users/05_Configuration.md:167
|
||||
msgid ""
|
||||
"This question comes up regularly, so we'll try to clarify how one can "
|
||||
"This question comes up regularly, so we will try to clarify how one can "
|
||||
"retrieve a truncated RSS feed with FreshRSS. Please note that the process is "
|
||||
"absolutely not user friendly, but it works. :)"
|
||||
msgstr ""
|
||||
|
@ -4409,16 +4409,16 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./users/05_Configuration.md:169
|
||||
msgid ""
|
||||
"Please be aware that this way you'll generate much more traffic to the "
|
||||
"Please be aware that this way you’ll generate much more traffic to the "
|
||||
"originating sites, and they might block you accordingly. FreshRSS "
|
||||
"performance is also negatively affected, because you'll have to fetch the "
|
||||
"full article content one by one. So it's a feature to use sparingly!"
|
||||
"performance is also negatively affected, because you’ll have to fetch the "
|
||||
"full article content one by one. So it’s a feature to use sparingly!"
|
||||
msgstr ""
|
||||
|
||||
#. type: Plain text
|
||||
#: en/./users/05_Configuration.md:171
|
||||
msgid ""
|
||||
"What's meant by \"CSS path of articles on the original site\" actually "
|
||||
"What’s meant by \"CSS path of articles on the original site\" actually "
|
||||
"corresponds to the \"path\" consisting of IDs and classes (which in HTML, "
|
||||
"matches the id and class attributes) to retrieve only the interesting part "
|
||||
"that corresponds to the article. Ideally, this path starts with an id (which "
|
||||
|
@ -4446,10 +4446,10 @@ msgstr ""
|
|||
#, no-wrap
|
||||
msgid ""
|
||||
"Here we find that the block that encompasses nothing but the content of the "
|
||||
"article is ```<div class=\"content clearfix\">```. We'll only use the "
|
||||
"`.content` class here. Nevertheless, as said above, it's best to start the "
|
||||
"article is ```<div class=\"content clearfix\">```. We’ll only use the "
|
||||
"`.content` class here. Nevertheless, as said above, it’s best to start the "
|
||||
"path with an id. If we go back to the parent block, we find ```<div "
|
||||
"id=\"article\">``` and that's perfect! The path will be ```#article "
|
||||
"id=\"article\">``` and that’s perfect! The path will be ```#article "
|
||||
".content```.\n"
|
||||
msgstr ""
|
||||
|
||||
|
@ -4526,7 +4526,7 @@ msgstr ""
|
|||
msgid ""
|
||||
"There are many RSS clients that support the Fever API, but they seem to "
|
||||
"understand the Fever API a bit differently. If your favourite client "
|
||||
"doesn't work properly with this API, please create an issue and we'll have a "
|
||||
"does not work properly with this API, please create an issue and we will have a "
|
||||
"look. But we can **only** do that for free clients."
|
||||
msgstr ""
|
||||
|
||||
|
@ -4762,7 +4762,7 @@ msgstr ""
|
|||
#. type: Plain text
|
||||
#: en/./users/06_Fever_API.md:88
|
||||
msgid ""
|
||||
"Perfect, you're now authenticated and you can start testing the more "
|
||||
"Perfect, you’re now authenticated and you can start testing the more "
|
||||
"advanced features. To do so, change the URL and append the possible API "
|
||||
"actions to your request parameters. Please refer to the [original Fever "
|
||||
"documentation](https://feedafever.com/api) for more information."
|
||||
|
@ -5083,7 +5083,7 @@ msgstr ""
|
|||
|
||||
#. type: Plain text
|
||||
#: en/./users/07_Frequently_Asked_Questions.md:6
|
||||
msgid "Of course, ```/i``` has a purpose! It's used for performance and usability:"
|
||||
msgid "Of course, ```/i``` has a purpose! It’s used for performance and usability:"
|
||||
msgstr ""
|
||||
|
||||
#. type: Bullet: '* '
|
||||
|
@ -5134,7 +5134,7 @@ msgstr ""
|
|||
#: en/./users/07_Frequently_Asked_Questions.md:17
|
||||
msgid ""
|
||||
"As explained in the [security "
|
||||
"section](/en/User_documentation/Installation/Security), it's highly "
|
||||
"section](/en/User_documentation/Installation/Security), it’s highly "
|
||||
"recommended to make only the public section available at the domain "
|
||||
"level. With that configuration, `./p` is the root folder for "
|
||||
"http://demo.freshrss.org/, thus making `robots.txt` available at the root of "
|
||||
|
@ -5166,24 +5166,24 @@ msgstr ""
|
|||
msgid ""
|
||||
"__Verify if the feed syntax is valid__ with the [W3C on-line "
|
||||
"tool](https://validator.w3.org/feed/ \"RSS and Atom feed validator\"). If "
|
||||
"it's not valid, there's nothing we can do."
|
||||
"it’s not valid, there’s nothing we can do."
|
||||
msgstr ""
|
||||
|
||||
#. type: Bullet: '1. '
|
||||
#: en/./users/07_Frequently_Asked_Questions.md:30
|
||||
msgid ""
|
||||
"__Verify SimplePie validation__ with the [SimplePie on-line "
|
||||
"tool](https://simplepie.org/demo/ \"SimplePie official demo\"). If it's not "
|
||||
"recognized, there's nothing we can do."
|
||||
"tool](https://simplepie.org/demo/ \"SimplePie official demo\"). If it’s not "
|
||||
"recognized, there’s nothing we can do."
|
||||
msgstr ""
|
||||
|
||||
#. type: Bullet: '1. '
|
||||
#: en/./users/07_Frequently_Asked_Questions.md:30
|
||||
msgid ""
|
||||
"__Verify FreshRSS integration__ with the [demo](https://demo.freshrss.org "
|
||||
"\"FreshRSS official demo\"). If it's not working, you need to [create an "
|
||||
"\"FreshRSS official demo\"). If it’s not working, you need to [create an "
|
||||
"issue on Github](https://github.com/FreshRSS/FreshRSS/issues/new \"Create an "
|
||||
"issue for FreshRSS\") so we can have a look at it. If it's working, there's "
|
||||
"issue for FreshRSS\") so we can have a look at it. If it’s working, there’s "
|
||||
"probably something fishy with the hosting server."
|
||||
msgstr ""
|
||||
|
||||
|
@ -5235,8 +5235,8 @@ msgstr ""
|
|||
msgid ""
|
||||
"Some Linux distribution, like Fedora or RedHat Enterprise Linux, have "
|
||||
"SELinux enabled. This acts similar to a firewall application, so that "
|
||||
"applications can't write or modify files under certain conditions. While "
|
||||
"installing FreshRSS, step 2 can fail if the httpd process can't write to "
|
||||
"applications can’t write or modify files under certain conditions. While "
|
||||
"installing FreshRSS, step 2 can fail if the httpd process cannot write to "
|
||||
"some data sub-directories. The following command should be executed as root "
|
||||
"to fix this problem:"
|
||||
msgstr ""
|
||||
|
|
|
@ -1120,7 +1120,7 @@ if ($pathInfos[1] === 'accounts') {
|
|||
//StreamId to operate on. The parameter may be repeated to edit multiple subscriptions at once
|
||||
$streamNames = empty($_POST['s']) && isset($_GET['s']) ? array($_GET['s']) : 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
|
||||
* if not specified then the feed’s current title will be used. Can
|
||||
* be used with the `edit` action to rename a subscription */
|
||||
$titles = empty($_POST['t']) && isset($_GET['t']) ? array($_GET['t']) : multiplePosts('t');
|
||||
$action = $_REQUEST['ac']; //Action to perform on the given StreamId. Possible values are `subscribe`, `unsubscribe` and `edit`
|
||||
|
|
|
@ -35,7 +35,7 @@ function load_panel(link) {
|
|||
panel.classList.add('visible');
|
||||
|
||||
// force le démarrage du scroll en haut.
|
||||
// Sans ça, si l'on scroll en lisant une catégorie par exemple,
|
||||
// Sans ça, si l’on scroll en lisant une catégorie par exemple,
|
||||
// en en ouvrant une autre ensuite, on se retrouve au même point de scroll
|
||||
panel.scrollTop = 0;
|
||||
document.documentElement.scrollTop = 0;
|
||||
|
|
|
@ -435,7 +435,7 @@ function toggleContent(new_active, old_active, skipping) {
|
|||
}
|
||||
|
||||
if (skipping) {
|
||||
// when skipping, this feels more natural if it's not so near the top
|
||||
// when skipping, this feels more natural if it’s not so near the top
|
||||
new_pos -= document.body.clientHeight / 4;
|
||||
}
|
||||
if (relative_move) {
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
function initCharts() {
|
||||
if (!window.Chart) {
|
||||
if (window.console) {
|
||||
console.log('FreshRSS is waiting for Chart.js...');
|
||||
console.log('FreshRSS is waiting for Chart.js…');
|
||||
}
|
||||
window.setTimeout(initCharts, 25);
|
||||
return;
|
||||
|
|
|
@ -101,7 +101,7 @@
|
|||
}
|
||||
|
||||
.tree .tree-folder .tree-folder-items .dropdown-menu {
|
||||
// tout ça sert à restaurer l'apparence du dropdown dans un contexte de sidebar sombre
|
||||
// tout ça sert à restaurer l’apparence du dropdown dans un contexte de sidebar sombre
|
||||
.item {
|
||||
padding: 0;
|
||||
|
||||
|
@ -148,7 +148,7 @@
|
|||
.alert-warn {
|
||||
background: $warning-light;
|
||||
color: $warning-text;
|
||||
border: 1px solid unquote($warning-text+'33'); // on ajoute l'opacité à la fin
|
||||
border: 1px solid unquote($warning-text+'33'); // on ajoute l’opacité à la fin
|
||||
}
|
||||
|
||||
.alert-success {
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
line-height: 1.2em;
|
||||
}
|
||||
|
||||
a[href="./"] { // C'est le bouton "Retour à vos flux"
|
||||
a[href="./"] { // C’est le bouton "Retour à vos flux"
|
||||
margin: 0;
|
||||
padding: 0.75rem 1.5rem;
|
||||
background: $grey-lighter;
|
||||
|
|
|
@ -9,7 +9,7 @@ $main-first-darker: #221f1d; // var pour les hovers
|
|||
// les couleurs de polices liées
|
||||
$main-font-color: #363330;
|
||||
$light-font-color: #6d655f;
|
||||
$white: #fff; // le blanc (des fois qu'on aurait envie de le teinter un peu)
|
||||
$white: #fff; // le blanc (des fois qu’on aurait envie de le teinter un peu)
|
||||
|
||||
// toute la palette des gris, très utile
|
||||
// on essaiera de teinter ces gris suivant la couleur principale
|
||||
|
@ -25,7 +25,7 @@ $unread-font-color: #161a38;
|
|||
$unread-bg: #f2f6f8;
|
||||
$unread-bg-light: #fdfdfe;
|
||||
|
||||
// les couleurs d'alertes (rouge, jaune, vert)
|
||||
// les couleurs d’alertes (rouge, jaune, vert)
|
||||
$alert-bg: #f5633e; // la base
|
||||
$alert-light: #fde0d8; // +light
|
||||
$alert-text: #73341f; // +foncé
|
||||
|
@ -42,10 +42,10 @@ $success-text: #0c7556;
|
|||
$fav-bg: #ffc300;
|
||||
$fav-light: #fff6da;
|
||||
|
||||
// la couleur de sidebar, utile si on a envie d'un thème qui aurait une sidebar foncé, e.g.
|
||||
// la couleur de sidebar, utile si on a envie d’un thème qui aurait une sidebar foncé, e.g.
|
||||
$sid-font-color: #363330; // la couleur de fond de la barre de gauche et du header
|
||||
$sid-bg: #fbf9f6; // le background général de la barre de gauche, et du header
|
||||
$sid-bg-alt: #f7f2ea; // le background de l'intérieur des groupes
|
||||
$sid-bg-alt: #f7f2ea; // le background de l’intérieur des groupes
|
||||
$sid-bg-dark: #efe3d3; // les hovers
|
||||
$sid-sep: #f0e7da; // les séparateurs
|
||||
$sid-active: $main-first; // la couleur active
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
Blue Lagoon
|
||||
=======
|
||||
|
||||
**C'est un cocktail (bis)! C'est la version plus "fresh" de [Screwdriver](https://github.com/misterair/Screwdriver). C'est... c'est... un thème pour l'agrégateur de flux RSS [FreshRSS](https://github.com/FreshRSS/FreshRSS/)**
|
||||
**C’est un cocktail (bis)! C’est la version plus “fresh” de [Screwdriver](https://github.com/misterair/Screwdriver). C’est… c’est… un thème pour l’agrégateur de flux RSS [FreshRSS](https://github.com/FreshRSS/FreshRSS/)**
|
||||
|
||||
En toute modestie, ce thème tue du Nyan Cat.
|
||||
|
||||
|
@ -12,7 +12,7 @@ Installation
|
|||
-----------------
|
||||
|
||||
1. Placez le dossier du thème dans ledossier /FreshRSS/p/themes/Screwdriver de votre FreshRSS;
|
||||
2. Allez dans les paramètres d'Affichage et changez de thème;
|
||||
2. Allez dans les paramètres d’Affichage et changez de thème;
|
||||
3. Profitez de votre Blue Laggon sans modération!
|
||||
4. Remontez les problèmes sur Github (*facultatif mais fortement apprécié*)
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "Blue Lagoon",
|
||||
"author": "Mister aiR",
|
||||
"description": "C'est un cocktail (bis)! C'est la version plus fresh de Screwdriver. C'est... c'est... un thème pour l'agrégateur de flux RSS FreshRSS. En toute modestie, ce thème tue du Nyan Cat.",
|
||||
"description": "C’est un cocktail (bis)! C’est la version plus fresh de Screwdriver. C’est… c’est… un thème pour l’agrégateur de flux RSS FreshRSS. En toute modestie, ce thème tue du Nyan Cat.",
|
||||
"version": 1.0,
|
||||
"files": ["_template.css","BlueLagoon.css"]
|
||||
}
|
||||
|
|
|
@ -100,7 +100,7 @@
|
|||
}
|
||||
|
||||
.tree .tree-folder .tree-folder-items .dropdown-menu {
|
||||
// tout ça sert à restaurer l'apparence du dropdown dans un contexte de sidebar sombre
|
||||
// tout ça sert à restaurer l’apparence du dropdown dans un contexte de sidebar sombre
|
||||
.item {
|
||||
padding: 0;
|
||||
|
||||
|
@ -147,7 +147,7 @@
|
|||
.alert-warn {
|
||||
background: $warning-light;
|
||||
color: $warning-text;
|
||||
border: 1px solid unquote($warning-text+'33'); // on ajoute l'opacité à la fin
|
||||
border: 1px solid unquote($warning-text+'33'); // on ajoute l’opacité à la fin
|
||||
}
|
||||
|
||||
.alert-success {
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
line-height: 1.2em;
|
||||
}
|
||||
|
||||
a[href="./"] { // C'est le bouton "Retour à vos flux"
|
||||
a[href="./"] { // C’est le bouton "Retour à vos flux"
|
||||
margin: 0;
|
||||
padding: 0.75rem 1.5rem;
|
||||
background: $grey-lighter;
|
||||
|
|
|
@ -9,7 +9,7 @@ $main-first-darker: #1d1e22; // var pour les hovers
|
|||
// les couleurs de polices liées
|
||||
$main-font-color: #303136;
|
||||
$light-font-color: #5b6871;
|
||||
$white: #fff; // le blanc (des fois qu'on aurait envie de le teinter un peu)
|
||||
$white: #fff; // le blanc (des fois qu’on aurait envie de le teinter un peu)
|
||||
|
||||
// toute la palette des gris, très utile
|
||||
// on essaiera de teinter ces gris suivant la couleur principale
|
||||
|
@ -25,7 +25,7 @@ $unread-font-color: $main-first;
|
|||
$unread-bg: #f2f6f8;
|
||||
$unread-bg-light: #fdfdfe;
|
||||
|
||||
// les couleurs d'alertes (rouge, jaune, vert)
|
||||
// les couleurs d’alertes (rouge, jaune, vert)
|
||||
$alert-bg: #f5633e; // la base
|
||||
$alert-light: #fde0d8; // +light
|
||||
$alert-text: #73341f; // +foncé
|
||||
|
@ -42,10 +42,10 @@ $success-text: #0c7540;
|
|||
$fav-bg: #ffc300;
|
||||
$fav-light: #fff6da;
|
||||
|
||||
// la couleur de sidebar, utile si on a envie d'un thème qui aurait une sidebar foncé, e.g.
|
||||
// la couleur de sidebar, utile si on a envie d’un thème qui aurait une sidebar foncé, e.g.
|
||||
$sid-font-color: #fff; // la couleur de fond de la barre de gauche et du header
|
||||
$sid-bg: #303136; // le background général de la barre de gauche, et du header
|
||||
$sid-bg-alt: #26272a; // le background de l'intérieur des groupes
|
||||
$sid-bg-alt: #26272a; // le background de l’intérieur des groupes
|
||||
$sid-bg-dark: #17181a; // les hovers
|
||||
$sid-sep: #3f3f3f; // les séparateurs
|
||||
$sid-active: $main-first; // la couleur active
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
Screwdriver
|
||||
=======
|
||||
|
||||
**C'est un cocktail! C'est chaud mais "fresh" à la fois. C'est... c'est... un thème pour l'agrégateur de flux RSS [FreshRSS](https://github.com/FreshRSS/FreshRSS/)!!**
|
||||
**C’est un cocktail! C’est chaud mais “fresh” à la fois. C’est… c’est… un thème pour l’agrégateur de flux RSS [FreshRSS](https://github.com/FreshRSS/FreshRSS/)!!**
|
||||
|
||||
En toute modestie, ce thème tue du chaton.
|
||||
|
||||
|
@ -12,7 +12,7 @@ Installation
|
|||
------------
|
||||
|
||||
1. Placez le dossier du thème dans ledossier /FreshRSS/p/themes/Screwdriver de votre FreshRSS;
|
||||
2. Allez dans les paramètres d'Affichage et changez de thème;
|
||||
2. Allez dans les paramètres d’Affichage et changez de thème;
|
||||
3. Profitez de votre Screwdriver!
|
||||
4. Remontez les problèmes sur Github (facultatif mais fortement apprécié)
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "Screwdriver",
|
||||
"author": "Mister aiR",
|
||||
"description": "C'est un cocktail ! C'est chaud mais « fresh » à la fois. Ce thème tue du chaton.",
|
||||
"description": "C’est un cocktail ! C’est chaud mais « fresh » à la fois. Ce thème tue du chaton.",
|
||||
"version": 1.1,
|
||||
"files": ["_template.css","screwdriver.css"]
|
||||
}
|
||||
|
|
|
@ -8,5 +8,5 @@ A base theme for [FreshRSS](https://freshrss.org)
|
|||
3. Choose your new theme in FreshRSS configuration
|
||||
4. Enjoy your wonderful theme!
|
||||
|
||||
Don't hesitate to share your theme with us [on Github](https://github.com/FreshRSS/FreshRSS/issues) :)
|
||||
Don’t hesitate to share your theme with us [on Github](https://github.com/FreshRSS/FreshRSS/issues) :)
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<rule ref="Generic.Files.LineLength">
|
||||
<!-- For language strings maximum line lengths make little sense. -->
|
||||
<exclude-pattern>./app/i18n/</exclude-pattern>
|
||||
<!-- Don't enforce line length on the HTML; the point is to improve legibility, not reduce it -->
|
||||
<!-- Don’t enforce line length on the HTML; the point is to improve legibility, not reduce it -->
|
||||
<exclude-pattern>*.phtml$</exclude-pattern>
|
||||
<properties>
|
||||
<property name="lineLimit" value="165"/>
|
||||
|
|
Loading…
Reference in New Issue