|
|
@@ -0,0 +1,6252 @@
|
|
|
+# French translations for PACKAGE package
|
|
|
+# Copyright (C) 2019 Free Software Foundation, Inc.
|
|
|
+# This file is distributed under the same license as the PACKAGE package.
|
|
|
+#
|
|
|
+# Automatically generated, 2019.
|
|
|
+# Frans de Jonge <fransdejonge@gmail.com>, 2019.
|
|
|
+msgid ""
|
|
|
+msgstr ""
|
|
|
+"Project-Id-Version: \n"
|
|
|
+"Report-Msgid-Bugs-To: https://github.com/FreshRSS/FreshRSS/issues\n"
|
|
|
+"POT-Creation-Date: 2019-11-15 10:34+0100\n"
|
|
|
+"PO-Revision-Date: 2019-11-15 10:34+0100\n"
|
|
|
+"Last-Translator: Frans de Jonge <fransdejonge@gmail.com>\n"
|
|
|
+"Language-Team: English <kde-i18n-doc@kde.org>\n"
|
|
|
+"Language: fr\n"
|
|
|
+"MIME-Version: 1.0\n"
|
|
|
+"Content-Type: text/plain; charset=UTF-8\n"
|
|
|
+"Content-Transfer-Encoding: 8bit\n"
|
|
|
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
|
|
+"X-Generator: Lokalize 2.0\n"
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./contributing.md:1
|
|
|
+#, no-wrap
|
|
|
+msgid "Join us on the mailing lists"
|
|
|
+msgstr "Rejoignez-nous sur les listes de mailing"
|
|
|
+
|
|
|
+#. 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 "
|
|
|
+"hesitate to subscribe to our mailing lists!"
|
|
|
+msgstr ""
|
|
|
+"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)."
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./contributing.md:7
|
|
|
+msgid ""
|
|
|
+"The first mailing is destined to generic information, it should be adapted "
|
|
|
+"to users. [Join mailing@freshrss.org](https://freshrss.org/mailman/listinfo/"
|
|
|
+"mailing)."
|
|
|
+msgstr ""
|
|
|
+"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)."
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./contributing.md:7
|
|
|
+msgid ""
|
|
|
+"The second mailing is mainly for developers. [Join dev@freshrss.org](https://"
|
|
|
+"freshrss.org/mailman/listinfo/dev)"
|
|
|
+msgstr ""
|
|
|
+"Le deuxième mailing s'adresse principalement aux développeurs. [Rejoignez "
|
|
|
+"dev@freshrss.org](https://freshrss.org/mailman/listinfo/dev)"
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./contributing.md:8
|
|
|
+#, no-wrap
|
|
|
+msgid "Report a bug"
|
|
|
+msgstr "Signaler un bug"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./contributing.md:11
|
|
|
+msgid ""
|
|
|
+"Have you found a bug? Don't panic, here are some steps to report it with "
|
|
|
+"ease:"
|
|
|
+msgstr ""
|
|
|
+"Avez-vous trouvé un bogue ? Ne paniquez pas, voici quelques étapes pour le "
|
|
|
+"signaler facilement :"
|
|
|
+
|
|
|
+#. type: Bullet: '1. '
|
|
|
+#: en/./contributing.md:15
|
|
|
+msgid ""
|
|
|
+"Search for it on [the bug tracker](https://github.com/FreshRSS/FreshRSS/"
|
|
|
+"issues) (don't forget to use the search bar)."
|
|
|
+msgstr ""
|
|
|
+"Cherche sur [le bug tracker](https://github.com/FreshRSS/FreshRSS/issues) "
|
|
|
+"(n'oubliez pas d'utiliser la barre de recherche)."
|
|
|
+
|
|
|
+#. type: Bullet: '2. '
|
|
|
+#: en/./contributing.md:15
|
|
|
+msgid ""
|
|
|
+"If you find a similar bug, don't hesitate to post a comment to add more "
|
|
|
+"importance to the related ticket."
|
|
|
+msgstr ""
|
|
|
+"Si vous constatez un bogue similaire, n'hésitez pas à poster un commentaire "
|
|
|
+"pour ajouter de l'importance au ticket correspondant."
|
|
|
+
|
|
|
+#. type: Bullet: '3. '
|
|
|
+#: en/./contributing.md:15
|
|
|
+msgid ""
|
|
|
+"If you didn't find it, [open a new ticket](https://github.com/FreshRSS/"
|
|
|
+"FreshRSS/issues/new)."
|
|
|
+msgstr ""
|
|
|
+"Si vous ne l'avez pas trouvé, [ouvrez un nouveau ticket](https://github.com/"
|
|
|
+"FreshRSS/FreshRSS/issues/new)."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./contributing.md:17
|
|
|
+msgid ""
|
|
|
+"If you have to create a new ticket, please try to keep in mind the following "
|
|
|
+"advice:"
|
|
|
+msgstr ""
|
|
|
+"Si vous devez créer un nouveau ticket, essayez de garder les conseils "
|
|
|
+"suivants :"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./contributing.md:20
|
|
|
+msgid ""
|
|
|
+"Give an explicit title to the ticket so it will be easier to find it later."
|
|
|
+msgstr ""
|
|
|
+"Donnez un titre explicite au ticket pour le retrouver plus facilement plus "
|
|
|
+"tard."
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./contributing.md:20
|
|
|
+msgid ""
|
|
|
+"Be as exhaustive as possible in the description: what did you do? What is "
|
|
|
+"the bug? What are the steps to reproduce the bug?"
|
|
|
+msgstr ""
|
|
|
+"Soyez aussi exhaustif que possible dans la description : qu'avez-vous fait ? "
|
|
|
+"Quel est le bogue ? Quelles sont les étapes pour reproduire le bogue ?"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./contributing.md:22
|
|
|
+msgid "We also need some information:"
|
|
|
+msgstr "Nous avons aussi besoin de quelques informations :"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./contributing.md:27
|
|
|
+msgid ""
|
|
|
+"Your FreshRSS version (on the about page or in the `constants.php` file)"
|
|
|
+msgstr ""
|
|
|
+"Votre version de FreshRSS (sur la page A propos) ou le fichier `constants."
|
|
|
+"php`)"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./contributing.md:27
|
|
|
+msgid "Your server configuration: the type of hosting and the PHP version"
|
|
|
+msgstr "Votre configuration de serveur : type d'hébergement, version PHP"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./contributing.md:27
|
|
|
+msgid "Your storage system (SQLite, MySQL, MariaDB, PostgreSQL)"
|
|
|
+msgstr ""
|
|
|
+"Quelle base de données : SQLite, MySQL, MariaDB, PostgreSQL ? Quelle "
|
|
|
+"version ?"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./contributing.md:27
|
|
|
+msgid ""
|
|
|
+"If possible, the related logs (PHP logs and FreshRSS logs under `data/users/"
|
|
|
+"your_user/log.txt`)"
|
|
|
+msgstr ""
|
|
|
+"Si possible, les logs associés (logs PHP et logs FreshRSS sous `data/users/"
|
|
|
+"your_user/log.txt`)"
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./contributing.md:28
|
|
|
+#, no-wrap
|
|
|
+msgid "Fix a bug"
|
|
|
+msgstr "Corriger un bogue"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./contributing.md:31
|
|
|
+msgid ""
|
|
|
+"Would you like to fix a bug? For optimum coordination between collaborators, "
|
|
|
+"you should follow these indications:"
|
|
|
+msgstr ""
|
|
|
+"Voulez-vous corriger un bogue ? Pour maintenir une grande coordination entre "
|
|
|
+"les collaborateurs, vous devrez suivre ces indications :"
|
|
|
+
|
|
|
+#. type: Bullet: '1. '
|
|
|
+#: en/./contributing.md:36
|
|
|
+msgid ""
|
|
|
+"Be sure the bug is associated with a ticket and indicate that you'll work on "
|
|
|
+"it."
|
|
|
+msgstr ""
|
|
|
+"Assurez-vous que le bogue est associé à un ticket et indiquez que vous allez "
|
|
|
+"travailler sur le bogue."
|
|
|
+
|
|
|
+#. type: Bullet: '2. '
|
|
|
+#: en/./contributing.md:36
|
|
|
+msgid ""
|
|
|
+"[Fork the project repository](https://help.github.com/articles/fork-a-repo/)."
|
|
|
+msgstr ""
|
|
|
+"[Fork du répertoire de projet](https://help.github.com/articles/fork-a-"
|
|
|
+"repo/)."
|
|
|
+
|
|
|
+#. type: Bullet: '3. '
|
|
|
+#: en/./contributing.md:36
|
|
|
+msgid ""
|
|
|
+"[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)."
|
|
|
+msgstr ""
|
|
|
+"[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. Par "
|
|
|
+"exemple, `783-contributing-file` pour réparer [ticket #783](https://github."
|
|
|
+"com/FreshRSS/FreshRSS/issues/783)."
|
|
|
+
|
|
|
+#. type: Bullet: '4. '
|
|
|
+#: en/./contributing.md:36
|
|
|
+msgid ""
|
|
|
+"Make your changes to your fork and [send a pull request](https://help.github."
|
|
|
+"com/articles/using-pull-requests/) on the **dev branch**."
|
|
|
+msgstr ""
|
|
|
+"Apportez vos modifications à votre fork et [envoyez une demande de pull]"
|
|
|
+"(https://help.github.com/articles/using-pull-requests/) sur la branche "
|
|
|
+"**dev**."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./contributing.md:38
|
|
|
+msgid ""
|
|
|
+"If you have to write code, please follow [our coding style recommendations]"
|
|
|
+"(developers/01_First_steps.md)."
|
|
|
+msgstr ""
|
|
|
+"Si vous devez écrire du code, veuillez suivre [nos recommandations de style "
|
|
|
+"de codage](developers/01_First_steps.md)."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./contributing.md:40
|
|
|
+#, no-wrap
|
|
|
+msgid "**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"
|
|
|
+msgstr "**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)\".\n"
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./contributing.md:41
|
|
|
+#, no-wrap
|
|
|
+msgid "Submit an idea"
|
|
|
+msgstr "Soumettre une idée"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./contributing.md:44
|
|
|
+msgid ""
|
|
|
+"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!"
|
|
|
+msgstr ""
|
|
|
+"Vous avez de bonnes idées, oui ! Ne soyez pas timide et ouvrez [un nouveau "
|
|
|
+"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 !"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./contributing.md:46
|
|
|
+msgid "If your idea is nice, we'll have a look at it."
|
|
|
+msgstr "Si votre idée est bonne, nous y jetterons un coup d'oeil."
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./contributing.md:47
|
|
|
+#, no-wrap
|
|
|
+msgid "Contribute to internationalization (i18n)"
|
|
|
+msgstr "Contribuer à l'internationalisation (i18n)"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./contributing.md:50
|
|
|
+msgid ""
|
|
|
+"If you want to improve internationalization, please open a new ticket first "
|
|
|
+"and follow the advice from the *Fix a bug* section."
|
|
|
+msgstr ""
|
|
|
+"Si vous voulez améliorer l'internationalisation, ouvrez d'abord un nouveau "
|
|
|
+"ticket et suivez les conseils de la section *Fixer un bogue*."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./contributing.md:52
|
|
|
+msgid "Translations are present in the subdirectories of `./app/i18n/`."
|
|
|
+msgstr ""
|
|
|
+"Les traductions sont disponibles dans les sous-répertoires de `./app/i18n/`."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./contributing.md:54
|
|
|
+msgid ""
|
|
|
+"We're working on a better way to handle internationalization, but don't "
|
|
|
+"hesitate to suggest any ideas!"
|
|
|
+msgstr ""
|
|
|
+"Nous travaillons sur une meilleure façon de gérer l'internationalisation "
|
|
|
+"mais n'hésitez pas à nous suggérer des idées !"
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./contributing.md:55
|
|
|
+#, no-wrap
|
|
|
+msgid "Contribute to documentation"
|
|
|
+msgstr "Contribuer à la documentation"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./contributing.md:58
|
|
|
+msgid ""
|
|
|
+"The documentation needs a lot of improvements in order to be more useful to "
|
|
|
+"new contributors and we are working on it. If you want to give some help, "
|
|
|
+"meet us in the main repositories [docs directory](https://github.com/"
|
|
|
+"FreshRSS/FreshRSS/tree/master/docs)!"
|
|
|
+msgstr ""
|
|
|
+"Il ne vous aura pas échappé que la documentation est encore un peu vide… il "
|
|
|
+"y a énormément de choses à faire ! Si vous souhaitez aider à écrire quelques "
|
|
|
+"pages, rendez-vous dans les principaux dépôts[fichier docs](https://github."
|
|
|
+"com/FreshRSS/FreshRSS/tree/master/docs) !"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/01_First_steps.md:1
|
|
|
+#, no-wrap
|
|
|
+msgid "Environment configuration (Docker)"
|
|
|
+msgstr "Configurer son environnement (Docker)"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: 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 "
|
|
|
+"Composer."
|
|
|
+msgstr ""
|
|
|
+"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."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:6
|
|
|
+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."
|
|
|
+msgstr ""
|
|
|
+"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 besoin."
|
|
|
+
|
|
|
+#. 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."
|
|
|
+msgstr ""
|
|
|
+"Nous supposons ici que vous utilisez une distribution GNU/Linux, capable "
|
|
|
+"d'exécuter Docker. Sinon, vous devrez adapter les commandes en conséquence."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:10
|
|
|
+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 "
|
|
|
+"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."
|
|
|
+msgstr ""
|
|
|
+"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 à "
|
|
|
+"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/`."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:12
|
|
|
+msgid ""
|
|
|
+"First, you need to install [Docker](https://docs.docker.com/install/linux/"
|
|
|
+"docker-ce/ubuntu/)."
|
|
|
+msgstr ""
|
|
|
+"Tout d'abord, vous devez installer [Docker](https://docs.docker.com/install/"
|
|
|
+"linux/docker-ce/ubuntu/)."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:14
|
|
|
+msgid "Once you're done, clone the repository with:"
|
|
|
+msgstr ""
|
|
|
+"Une fois que c'est fait, clonez le dépôt de code de la manière suivante :"
|
|
|
+
|
|
|
+#. type: Code fence info string
|
|
|
+#: en/./developers/01_First_steps.md:15 en/./developers/01_First_steps.md:24
|
|
|
+#: en/./developers/01_First_steps.md:34 en/./developers/01_First_steps.md:42
|
|
|
+#: en/./developers/01_First_steps.md:50
|
|
|
+#, no-wrap
|
|
|
+msgid "console"
|
|
|
+msgstr "console"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:15
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"$ git clone https://github.com/FreshRSS/FreshRSS.git\n"
|
|
|
+"$ cd FreshRSS\n"
|
|
|
+msgstr ""
|
|
|
+"$ git clone https://github.com/FreshRSS/FreshRSS.git\n"
|
|
|
+"$ cd FreshRSS\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:21
|
|
|
+msgid ""
|
|
|
+"Note that, if you want to contribute, you have to fork the repository first "
|
|
|
+"and clone your fork instead of the \"root\" one. Adapt the commands in "
|
|
|
+"consequence."
|
|
|
+msgstr ""
|
|
|
+"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."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:23
|
|
|
+msgid "Then, the only command you need to know is the following:"
|
|
|
+msgstr "Ensuite, la seule commande que vous devez connaître est la suivante :"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:24
|
|
|
+#, no-wrap
|
|
|
+msgid "$ make start\n"
|
|
|
+msgstr "$ make start\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: 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`."
|
|
|
+msgstr ""
|
|
|
+"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`."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:31
|
|
|
+#, no-wrap
|
|
|
+msgid "**You can now access FreshRSS at [http://localhost:8080](http://localhost:8080).** Just follow the install process and select the SQLite database.\n"
|
|
|
+msgstr "**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.\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:33
|
|
|
+#, no-wrap
|
|
|
+msgid "You can stop the containers by typing <kbd>Control</kbd> + <kbd>c</kbd> or with the following command, in another terminal:\n"
|
|
|
+msgstr "Vous pouvez arrêter les conteneurs en tapant <kbd>Control</kbd> + <kbd>c</kbd> ou avec la commande suivante, dans un autre terminal:\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:34
|
|
|
+#, no-wrap
|
|
|
+msgid "$ make stop\n"
|
|
|
+msgstr "$ make stop\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:39
|
|
|
+msgid ""
|
|
|
+"If you're interested in the configuration, the `make` commands are defined "
|
|
|
+"in the [`Makefile`](/Makefile)."
|
|
|
+msgstr ""
|
|
|
+"Si la configuration vous intéresse, les commandes `make' sont définies dans "
|
|
|
+"le fichier [`Makefile`](/Makefile)."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:41
|
|
|
+msgid ""
|
|
|
+"If you need to use a different tag image (default is `dev-alpine`), you can "
|
|
|
+"set the `TAG` environment variable:"
|
|
|
+msgstr ""
|
|
|
+"Si vous avez besoin d'utiliser une image Docker identifiée par un tag "
|
|
|
+"différent (par défaut `dev-alpine`), vous pouvez surcharger de la manière "
|
|
|
+"suivante la variable d'environnement `TAG` au moment de l'exécution de la "
|
|
|
+"commande :"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:42
|
|
|
+#, no-wrap
|
|
|
+msgid "$ TAG=dev-arm make start\n"
|
|
|
+msgstr "$ TAG=dev-arm make start\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:47
|
|
|
+msgid ""
|
|
|
+"You can find the full list of available tags [on the Docker hub](https://hub."
|
|
|
+"docker.com/r/freshrss/freshrss/tags)."
|
|
|
+msgstr ""
|
|
|
+"Vous pouvez trouver la liste complète des tags disponibles [sur le hub "
|
|
|
+"Docker](https://hub.docker.com/r/freshrss/freshrss/tags)."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:49
|
|
|
+msgid ""
|
|
|
+"If you want to build the Docker image yourself, you can use the following "
|
|
|
+"command:"
|
|
|
+msgstr ""
|
|
|
+"Si vous voulez construire l'image Docker, vous pouvez lancer la commande "
|
|
|
+"suivante :"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:50
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"$ make build\n"
|
|
|
+"$ # or\n"
|
|
|
+"$ TAG=dev-arm make build\n"
|
|
|
+msgstr ""
|
|
|
+"$ make build\n"
|
|
|
+"$ # ou\n"
|
|
|
+"$ TAG=dev-arm make build\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:57
|
|
|
+msgid ""
|
|
|
+"The `TAG` variable can be anything (e.g. `dev-local`). You can target a "
|
|
|
+"specific architecture by adding `-alpine` or `-arm` at the end of the tag (e."
|
|
|
+"g. `dev-local-arm`)."
|
|
|
+msgstr ""
|
|
|
+"La valeur de la variable `TAG` peut contenir n'importe quelle valeur (par "
|
|
|
+"exemple `dev-local`). Vous pouvez cibler une architecture spécifique en "
|
|
|
+"ajoutant `-alpine` ou `-arm` à la fin du tag (par exemple `dev-local-arm`)."
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/01_First_steps.md:58
|
|
|
+#, no-wrap
|
|
|
+msgid "Project architecture"
|
|
|
+msgstr "Architecture du projet"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:61 en/./developers/03_Backend/02_Minz.md:4
|
|
|
+#: en/./developers/03_Backend/02_Minz.md:8
|
|
|
+#: en/./developers/03_Backend/02_Minz.md:12
|
|
|
+#: en/./developers/03_Backend/02_Minz.md:16
|
|
|
+#: en/./developers/03_Backend/02_Minz.md:20
|
|
|
+#: en/./developers/03_Backend/02_Minz.md:24
|
|
|
+#: en/./developers/03_Backend/02_Minz.md:27
|
|
|
+#: en/./developers/03_Backend/04_Changing_source_code.md:4
|
|
|
+#: en/./developers/03_Backend/04_Changing_source_code.md:8
|
|
|
+#: en/./developers/03_Backend/04_Changing_source_code.md:12
|
|
|
+#: en/./developers/03_Backend/04_Changing_source_code.md:15
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:342
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:381
|
|
|
+#: en/./developers/04_Frontend/01_View_files.md:4
|
|
|
+#: en/./developers/04_Frontend/01_View_files.md:8
|
|
|
+#: en/./developers/04_Frontend/01_View_files.md:12
|
|
|
+#: en/./developers/04_Frontend/01_View_files.md:15
|
|
|
+#: en/./developers/04_Frontend/02_Design.md:4
|
|
|
+#: en/./developers/04_Frontend/02_Design.md:8
|
|
|
+#: en/./developers/04_Frontend/02_Design.md:11 en/./users/03_Main_view.md:4
|
|
|
+#: en/./users/03_Main_view.md:8 en/./users/03_Main_view.md:12
|
|
|
+#: en/./users/04_Subscriptions.md:4 en/./users/04_Subscriptions.md:8
|
|
|
+#: en/./users/04_Subscriptions.md:19 en/./users/05_Configuration.md:70
|
|
|
+#: en/./users/05_Configuration.md:74 en/./users/05_Configuration.md:128
|
|
|
+#: en/./users/05_Configuration.md:153 en/./users/05_Configuration.md:157
|
|
|
+#: en/./users/05_Configuration.md:161
|
|
|
+#, no-wrap
|
|
|
+msgid "**TODO**\n"
|
|
|
+msgstr "**À FAIRE**\n"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/01_First_steps.md:62
|
|
|
+#, no-wrap
|
|
|
+msgid "Extensions"
|
|
|
+msgstr "Extensions"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:65
|
|
|
+msgid ""
|
|
|
+"If you want to create your own FreshRSS extension, take a look at the "
|
|
|
+"[extension documentation](03_Backend/05_Extensions.md)."
|
|
|
+msgstr ""
|
|
|
+"Si vous souhaitez créer votre propre extension FreshRSS, consultez la "
|
|
|
+"[documentation de l'extension](03_Backend/05_Extensions.md)."
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/01_First_steps.md:66
|
|
|
+#, no-wrap
|
|
|
+msgid "Coding style"
|
|
|
+msgstr "Style de codage"
|
|
|
+
|
|
|
+#. 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 "
|
|
|
+"the project, but we should fix it every time an opportunity presents itself."
|
|
|
+msgstr ""
|
|
|
+"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."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:71
|
|
|
+msgid ""
|
|
|
+"Contributions which don't follow the coding style will be rejected as long "
|
|
|
+"as the coding style is not fixed."
|
|
|
+msgstr ""
|
|
|
+"Aucune nouvelle contribution ne respectant pas ces règles ne sera acceptée "
|
|
|
+"tant que les corrections nécessaires ne sont pas appliquées."
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./developers/01_First_steps.md:72
|
|
|
+#, no-wrap
|
|
|
+msgid "Spaces, tabs and other whitespace characters"
|
|
|
+msgstr "Espaces, tabulations et autres caractères blancs"
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/01_First_steps.md:74
|
|
|
+#, no-wrap
|
|
|
+msgid "Indentation"
|
|
|
+msgstr "Indentation"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:76
|
|
|
+msgid "Code indentation must use tabs."
|
|
|
+msgstr ""
|
|
|
+"L'indentation du code doit être faite impérativement avec des tabulations."
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/01_First_steps.md:77
|
|
|
+#, no-wrap
|
|
|
+msgid "Alignment"
|
|
|
+msgstr "Alignement"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:80
|
|
|
+msgid ""
|
|
|
+"Once the code has been correctly indented, it might be useful to align it "
|
|
|
+"for ease of reading. In that case, please use spaces."
|
|
|
+msgstr ""
|
|
|
+"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."
|
|
|
+
|
|
|
+#. type: Code fence info string
|
|
|
+#: en/./developers/01_First_steps.md:81 en/./developers/01_First_steps.md:111
|
|
|
+#: en/./developers/01_First_steps.md:123 en/./developers/01_First_steps.md:158
|
|
|
+#: en/./developers/01_First_steps.md:173 en/./developers/01_First_steps.md:186
|
|
|
+#: en/./developers/01_First_steps.md:196 en/./developers/01_First_steps.md:213
|
|
|
+#: en/./developers/01_First_steps.md:228
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:47
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:88
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:130
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:149
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:166
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:188
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:225
|
|
|
+#: en/./developers/05_Release_new_version.md:54 en/./users/06_Fever_API.md:107
|
|
|
+#, no-wrap
|
|
|
+msgid "php"
|
|
|
+msgstr "php"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:81
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"$result = a_function_with_a_really_long_name($param1, $param2,\n"
|
|
|
+" $param3, $param4);\n"
|
|
|
+msgstr ""
|
|
|
+"$resultat = une_fonction_avec_un_nom_long($param1, $param2,\n"
|
|
|
+" $param3, $param4);\n"
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/01_First_steps.md:86
|
|
|
+#, no-wrap
|
|
|
+msgid "End of line"
|
|
|
+msgstr "Fin de ligne"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:89
|
|
|
+msgid ""
|
|
|
+"The newline character must be a line feed (LF), which is the default line "
|
|
|
+"ending on *NIX systems. This character must not follow other white space."
|
|
|
+msgstr ""
|
|
|
+"Le caractère de fin de ligne doit être un saut de ligne (LF) qui est le "
|
|
|
+"caractère de fin de ligne des systèmes *NIX. Ce caractère ne doit pas être "
|
|
|
+"précédé par des caractères blanc."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:91
|
|
|
+msgid ""
|
|
|
+"You can verify if there is any unintended white space at the end of line "
|
|
|
+"with the following Git command:"
|
|
|
+msgstr ""
|
|
|
+"Il est possible de vérifier la présence de caractères blancs en fin de ligne "
|
|
|
+"grâce à Git avec la commande suivante :"
|
|
|
+
|
|
|
+#. type: Code fence info string
|
|
|
+#: en/./developers/01_First_steps.md:92 en/./developers/02_Github.md:80
|
|
|
+#: en/./developers/02_Github.md:85 en/./developers/02_Github.md:90
|
|
|
+#: en/./developers/02_Github.md:96 en/./developers/02_Github.md:102
|
|
|
+#: en/./developers/05_Release_new_version.md:15
|
|
|
+#: en/./developers/05_Release_new_version.md:102
|
|
|
+#, no-wrap
|
|
|
+msgid "bash"
|
|
|
+msgstr "bash"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:92
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"# command to check files before adding them in the Git index\n"
|
|
|
+"git diff --check\n"
|
|
|
+"# command to check files after adding them in the Git index\n"
|
|
|
+"git diff --check --cached\n"
|
|
|
+msgstr ""
|
|
|
+"# commande à lancer avant l'ajout des fichiers dans l'index\n"
|
|
|
+"git diff --check\n"
|
|
|
+"# commande à lancer après l'ajout des fichiers dans l'index mais avant le commit\n"
|
|
|
+"git diff --check --cached\n"
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/01_First_steps.md:99 en/./developers/01_First_steps.md:220
|
|
|
+#, no-wrap
|
|
|
+msgid "End of file"
|
|
|
+msgstr "Fin de fichier"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:102
|
|
|
+msgid "Every file must end by an empty line."
|
|
|
+msgstr "Chaque fichier doit se terminer par une ligne vide."
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/01_First_steps.md:103
|
|
|
+#, no-wrap
|
|
|
+msgid "Commas, dots and semi-columns"
|
|
|
+msgstr "Le cas de la virgule, du point et du point-virgule"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:106
|
|
|
+msgid ""
|
|
|
+"There should no space before those characters, but there should be one after."
|
|
|
+msgstr "Il n'y a pas d'espace avant ces caractères, il y en a un après."
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/01_First_steps.md:107 en/./developers/01_First_steps.md:210
|
|
|
+#, no-wrap
|
|
|
+msgid "Operators"
|
|
|
+msgstr "Le cas des opérateurs"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:110
|
|
|
+msgid "There should be a space before and after every operator."
|
|
|
+msgstr "Chaque opérateur est entouré d'espaces."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:111
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"if ($a == 10) {\n"
|
|
|
+"\t// do something\n"
|
|
|
+"}\n"
|
|
|
+"\n"
|
|
|
+"echo $a ? 1 : 0;\n"
|
|
|
+msgstr ""
|
|
|
+"if ($a == 10) {\n"
|
|
|
+"\t// faire quelque chose\n"
|
|
|
+"}\n"
|
|
|
+"\n"
|
|
|
+"echo $a ? 1 : 0;\n"
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/01_First_steps.md:119
|
|
|
+#, no-wrap
|
|
|
+msgid "Parentheses"
|
|
|
+msgstr "Le cas des parenthèses"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: 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 "
|
|
|
+"bracket."
|
|
|
+msgstr ""
|
|
|
+"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."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:123
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"if ($a == 10) {\n"
|
|
|
+"\t// do something\n"
|
|
|
+"}\n"
|
|
|
+"\n"
|
|
|
+"if ((int)$a == 10) {\n"
|
|
|
+"\t// do something\n"
|
|
|
+"}\n"
|
|
|
+msgstr ""
|
|
|
+"if ($a == 10) {\n"
|
|
|
+"\t// faire quelque chose\n"
|
|
|
+"}\n"
|
|
|
+"\n"
|
|
|
+"if ((int)$a == 10) {\n"
|
|
|
+"\t// faire quelque chose\n"
|
|
|
+"}\n"
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/01_First_steps.md:133
|
|
|
+#, no-wrap
|
|
|
+msgid "With chained functions"
|
|
|
+msgstr "Le cas des fonctions chainées"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: 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 "
|
|
|
+"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."
|
|
|
+msgstr ""
|
|
|
+"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 "
|
|
|
+"une instruction de même niveau."
|
|
|
+
|
|
|
+#. type: Code fence info string
|
|
|
+#: en/./developers/01_First_steps.md:137
|
|
|
+#, no-wrap
|
|
|
+msgid "javascript"
|
|
|
+msgstr "javascript"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:137
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"// First instruction\n"
|
|
|
+"shortcut.add(shortcuts.mark_read, function () {\n"
|
|
|
+"\t\t//...\n"
|
|
|
+"\t}, {\n"
|
|
|
+"\t\t'disable_in_input': true\n"
|
|
|
+"\t});\n"
|
|
|
+"// Second instruction\n"
|
|
|
+"shortcut.add(\"shift+\" + shortcuts.mark_read, function () {\n"
|
|
|
+"\t\t//...\n"
|
|
|
+"\t}, {\n"
|
|
|
+"\t\t'disable_in_input': true\n"
|
|
|
+"\t});\n"
|
|
|
+msgstr ""
|
|
|
+"// Première instruction\n"
|
|
|
+"shortcut.add(shortcuts.mark_read, function () {\n"
|
|
|
+"\t\t//...\n"
|
|
|
+"\t}, {\n"
|
|
|
+"\t\t'disable_in_input': true\n"
|
|
|
+"\t});\n"
|
|
|
+"// Deuxième instruction\n"
|
|
|
+"shortcut.add(\"shift+\" + shortcuts.mark_read, function () {\n"
|
|
|
+"\t\t//...\n"
|
|
|
+"\t}, {\n"
|
|
|
+"\t\t'disable_in_input': true\n"
|
|
|
+"\t});\n"
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./developers/01_First_steps.md:152
|
|
|
+#, no-wrap
|
|
|
+msgid "Line length"
|
|
|
+msgstr "Longueur des lignes"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:155
|
|
|
+msgid ""
|
|
|
+"Lines should strive to be shorter than 80 characters. However, this limit "
|
|
|
+"may be extended to 100 characters when strictly necessary."
|
|
|
+msgstr ""
|
|
|
+"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 "
|
|
|
+"respecter mais en aucun cas, les lignes ne doivent dépasser les 100 "
|
|
|
+"caractères."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:157
|
|
|
+msgid "With functions, parameters can be declared on multiple lines."
|
|
|
+msgstr ""
|
|
|
+"Dans le cas des fonctions, les paramètres peuvent être déclarés sur "
|
|
|
+"plusieurs lignes."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:158
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"function my_function($param_1, $param_2,\n"
|
|
|
+" $param_3, $param_4) {\n"
|
|
|
+"\t// do something\n"
|
|
|
+"}\n"
|
|
|
+msgstr ""
|
|
|
+"function ma_fonction($param_1, $param_2,\n"
|
|
|
+" $param_3, $param_4) {\n"
|
|
|
+"\t// faire quelque chose\n"
|
|
|
+"}\n"
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./developers/01_First_steps.md:165
|
|
|
+#, no-wrap
|
|
|
+msgid "Naming"
|
|
|
+msgstr "Nommage"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:168
|
|
|
+msgid ""
|
|
|
+"All code elements (functions, classes, methods and variables) must describe "
|
|
|
+"their usage succinctly."
|
|
|
+msgstr ""
|
|
|
+"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."
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/01_First_steps.md:169
|
|
|
+#, no-wrap
|
|
|
+msgid "Functions and variables"
|
|
|
+msgstr "Fonctions et variables"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:172
|
|
|
+msgid ""
|
|
|
+"Functions and variables must follow the \"snake case\" naming convention."
|
|
|
+msgstr ""
|
|
|
+"Les fonctions et les variables doivent suivre la convention \"snake case\"."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:173
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"// a function\n"
|
|
|
+"function function_name() {\n"
|
|
|
+"\t// do something\n"
|
|
|
+"}\n"
|
|
|
+"// a variable\n"
|
|
|
+"$variable_name;\n"
|
|
|
+msgstr ""
|
|
|
+"// une fontion\n"
|
|
|
+"function nom_de_la_fontion() {\n"
|
|
|
+"\t// faire quelque chose\n"
|
|
|
+"}\n"
|
|
|
+"// une variable\n"
|
|
|
+"$nom_de_la_variable;\n"
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/01_First_steps.md:182
|
|
|
+#, no-wrap
|
|
|
+msgid "Methods"
|
|
|
+msgstr "Méthodes"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:185
|
|
|
+msgid "Methods must follow the \"lower camel case\" naming convention."
|
|
|
+msgstr "Les méthodes doivent suivre la convention \"lower camel case\"."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:186
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"private function methodName() {\n"
|
|
|
+"\t// do something\n"
|
|
|
+"}\n"
|
|
|
+msgstr ""
|
|
|
+"private function nomDeLaMethode() {\n"
|
|
|
+"\t// faire quelque chose\n"
|
|
|
+"}\n"
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/01_First_steps.md:192
|
|
|
+#, no-wrap
|
|
|
+msgid "Classes"
|
|
|
+msgstr "Classes"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:195
|
|
|
+msgid "Classes must follow the \"upper camel case\" naming convention."
|
|
|
+msgstr "Les classes doivent suivre la convention \"upper camel case\"."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:196
|
|
|
+#, no-wrap
|
|
|
+msgid "abstract class ClassName {}\n"
|
|
|
+msgstr "abstract class NomDeLaClasse {}\n"
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./developers/01_First_steps.md:200
|
|
|
+#, no-wrap
|
|
|
+msgid "Encoding"
|
|
|
+msgstr "Encodage"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:203
|
|
|
+msgid "Files must be encoded with the UTF-8 character set."
|
|
|
+msgstr "Les fichiers doivent être encodés en UTF-8."
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./developers/01_First_steps.md:204
|
|
|
+#, no-wrap
|
|
|
+msgid "PHP compatibility"
|
|
|
+msgstr "Compatibilité PHP"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:207
|
|
|
+msgid ""
|
|
|
+"Please ensure that your code works with the oldest PHP version officially "
|
|
|
+"supported by FreshRSS."
|
|
|
+msgstr ""
|
|
|
+"Assurez-vous que votre code fonctionne avec une version de PHP aussi "
|
|
|
+"ancienne que celle que FreshRSS supporte officiellement."
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./developers/01_First_steps.md:208
|
|
|
+#, no-wrap
|
|
|
+msgid "Miscellaneous"
|
|
|
+msgstr "Divers"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:212
|
|
|
+msgid ""
|
|
|
+"Operators must be at the end of the line if a condition is split over more "
|
|
|
+"than one line."
|
|
|
+msgstr ""
|
|
|
+"Les opérateurs doivent être en fin de ligne dans le cas de conditions sur "
|
|
|
+"plusieurs lignes."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:213
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"if ($a == 10 ||\n"
|
|
|
+" $a == 20) {\n"
|
|
|
+"\t// do something\n"
|
|
|
+"}\n"
|
|
|
+msgstr ""
|
|
|
+"if ($a == 10 ||\n"
|
|
|
+" $a == 20) {\n"
|
|
|
+"\t// faire quelque chose\n"
|
|
|
+"}\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:223
|
|
|
+msgid ""
|
|
|
+"If the file contains only PHP code, the PHP closing tag must be omitted."
|
|
|
+msgstr ""
|
|
|
+"Si le fichier ne contient que du PHP, il ne doit pas comporter de balise "
|
|
|
+"fermante."
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/01_First_steps.md:224
|
|
|
+#, no-wrap
|
|
|
+msgid "Arrays"
|
|
|
+msgstr "Tableaux"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:227
|
|
|
+msgid ""
|
|
|
+"If an array declaration runs on more than one line, each element must be "
|
|
|
+"followed by a comma, including the last one."
|
|
|
+msgstr ""
|
|
|
+"Lors de l'écriture de tableaux sur plusieurs lignes, tous les éléments "
|
|
|
+"doivent être suivis d'une virgule (même le dernier)."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/01_First_steps.md:228
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"$variable = [\n"
|
|
|
+"\t\"value 1\",\n"
|
|
|
+"\t\"value 2\",\n"
|
|
|
+"\t\"value 3\",\n"
|
|
|
+"];\n"
|
|
|
+msgstr ""
|
|
|
+"$variable = [\n"
|
|
|
+"\t\"valeur 1\",\n"
|
|
|
+"\t\"valeur 2\",\n"
|
|
|
+"\t\"valeur 3\",\n"
|
|
|
+"];\n"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/02_Github.md:1
|
|
|
+#, no-wrap
|
|
|
+msgid "Reporting a bug or a suggestion"
|
|
|
+msgstr "Remonter un problème ou une suggestion"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/02_Github.md:4
|
|
|
+msgid ""
|
|
|
+"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 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."
|
|
|
+msgstr ""
|
|
|
+"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, "
|
|
|
+"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 "
|
|
|
+"attentive. Ce sont les regards externes qui font le plus évoluer le projet."
|
|
|
+
|
|
|
+#. 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 it."
|
|
|
+msgstr ""
|
|
|
+"Si vous êtes convaincus qu'il faut vous faire entendre, voici la marche à "
|
|
|
+"suivre."
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./developers/02_Github.md:7
|
|
|
+#, no-wrap
|
|
|
+msgid "On GitHub"
|
|
|
+msgstr "Sur GitHub"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/02_Github.md:10
|
|
|
+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!"
|
|
|
+msgstr ""
|
|
|
+"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\" !"
|
|
|
+
|
|
|
+#. type: Bullet: ' 1. '
|
|
|
+#: en/./developers/02_Github.md:16
|
|
|
+msgid ""
|
|
|
+"[Go to the bug ticket manager](https://github.com/FreshRSS/FreshRSS/issues)"
|
|
|
+msgstr ""
|
|
|
+"[Rendez-vous sur le gestionnaire de tickets de bugs](https://github.com/"
|
|
|
+"FreshRSS/FreshRSS/issues)"
|
|
|
+
|
|
|
+#. type: Bullet: ' 2. '
|
|
|
+#: en/./developers/02_Github.md:16
|
|
|
+msgid ""
|
|
|
+"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 ""
|
|
|
+"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."
|
|
|
+
|
|
|
+#. type: Bullet: ' 3. '
|
|
|
+#: en/./developers/02_Github.md:16
|
|
|
+msgid ""
|
|
|
+"If your request is new, [open a new bug ticket](https://github.com/FreshRSS/"
|
|
|
+"FreshRSS/issues/new)"
|
|
|
+msgstr ""
|
|
|
+"Si votre demande est nouvelle, [ouvrez un nouveau ticket de bug](https://"
|
|
|
+"github.com/FreshRSS/FreshRSS/issues/new)"
|
|
|
+
|
|
|
+#. type: Bullet: ' 4. '
|
|
|
+#: en/./developers/02_Github.md:16
|
|
|
+msgid ""
|
|
|
+"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 ""
|
|
|
+"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 :)"
|
|
|
+
|
|
|
+#. type: Bullet: ' 5. '
|
|
|
+#: en/./developers/02_Github.md:16
|
|
|
+msgid ""
|
|
|
+"Please follow the tips below to make it easier to let your ticket be heard."
|
|
|
+msgstr ""
|
|
|
+"Merci de bien vouloir suivre les quelques conseils donnés plus bas pour "
|
|
|
+"faciliter la prise en compte de votre ticket."
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./developers/02_Github.md:17
|
|
|
+#, no-wrap
|
|
|
+msgid "Informal"
|
|
|
+msgstr "De façon informelle"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/02_Github.md:20
|
|
|
+msgid ""
|
|
|
+"Not everyone likes or uses GitHub for a variety of legitimate reasons. That "
|
|
|
+"is why you can also contact us in a more informal way."
|
|
|
+msgstr ""
|
|
|
+"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."
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/02_Github.md:26
|
|
|
+msgid ""
|
|
|
+"On [our Mattermost chat](https://framateam.org/signup_user_complete/?"
|
|
|
+"id=e2680d3e3128b9fac8fdb3003b0024ee)"
|
|
|
+msgstr ""
|
|
|
+"Sur [notre chat Mattermost](https://framateam.org/signup_user_complete/?"
|
|
|
+"id=e2680d3e3128b9fac8fdb3003b0024ee)"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/02_Github.md:26
|
|
|
+msgid ""
|
|
|
+"On [the mailing lists](https://freshrss.org/announce-of-the-mailing-lists."
|
|
|
+"html)"
|
|
|
+msgstr ""
|
|
|
+"Sur [les listes de diffusion](https://freshrss.org/announce-of-the-mailing-"
|
|
|
+"lists.html)"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/02_Github.md:26
|
|
|
+msgid "At events / meetings around Free Software"
|
|
|
+msgstr "À des évènements / rencontres autour du Logiciel Libre"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/02_Github.md:26
|
|
|
+msgid "Over a beer in a bar"
|
|
|
+msgstr "Autour d'une bière dans un bar"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/02_Github.md:26
|
|
|
+msgid "Etc."
|
|
|
+msgstr "Etc."
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./developers/02_Github.md:27
|
|
|
+#, no-wrap
|
|
|
+msgid "Tips"
|
|
|
+msgstr "Conseils"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/02_Github.md:30
|
|
|
+msgid "Here are some tips to help you present your bug report or suggestion:"
|
|
|
+msgstr ""
|
|
|
+"Voici quelques conseils pour bien présenter votre remontée de bug ou votre "
|
|
|
+"suggestion :"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/02_Github.md:39
|
|
|
+msgid ""
|
|
|
+"**Pay attention to spelling**. Even if it's not always easy, try your best!"
|
|
|
+msgstr ""
|
|
|
+"**Faites attention à l'orthographe.** même si ce n'est pas toujours facile, "
|
|
|
+"faites votre maximum. ;)"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/02_Github.md:39
|
|
|
+msgid ""
|
|
|
+"**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 ""
|
|
|
+"**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."
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: 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 "
|
|
|
+"requests when possible."
|
|
|
+msgstr ""
|
|
|
+"**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."
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/02_Github.md:39
|
|
|
+msgid ""
|
|
|
+"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`)."
|
|
|
+msgstr ""
|
|
|
+"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'')."
|
|
|
+
|
|
|
+#. 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 "
|
|
|
+"already searched."
|
|
|
+msgstr ""
|
|
|
+"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é."
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/02_Github.md:39
|
|
|
+msgid ""
|
|
|
+"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!"
|
|
|
+msgstr ""
|
|
|
+"Tous les bugs ne nécessitent pas les logs, mais si vous doutez, mieux vaut "
|
|
|
+"nous les fournir. Les logs sont importants et très utiles pour débugguer !"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/02_Github.md:39
|
|
|
+msgid ""
|
|
|
+"The logs may reveal confidential information, so **be careful not to "
|
|
|
+"disclose anything sensitive.**"
|
|
|
+msgstr ""
|
|
|
+"Il se peut que les logs puissent révéler des informations plus ou moins "
|
|
|
+"confidentielles, **faites attention à ne rien divulguer de sensible.**"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/02_Github.md:41
|
|
|
+msgid ""
|
|
|
+"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 ""
|
|
|
+"De plus, face à un bug, je ne peux que vous encourager à suivre le format de "
|
|
|
+"message suivant (tiré du [site de Sam & Max](http://sametmax.com/template-de-"
|
|
|
+"demande-daide-en-informatique/)) :"
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/02_Github.md:42
|
|
|
+#, no-wrap
|
|
|
+msgid "What's my goal?"
|
|
|
+msgstr "Quel est mon objectif ?"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/02_Github.md:45
|
|
|
+msgid "Give the general context of what you were trying to do."
|
|
|
+msgstr "Donnez le contexte général de ce que vous essayiez de faire."
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/02_Github.md:46
|
|
|
+#, no-wrap
|
|
|
+msgid "What have I been trying to do?"
|
|
|
+msgstr "Qu’est-ce que j’ai essayé de faire ?"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/02_Github.md:49
|
|
|
+msgid ""
|
|
|
+"Explain step by step what you have done so that we can reproduce the bug."
|
|
|
+msgstr ""
|
|
|
+"Expliquez pas à pas ce que vous avez fait afin que nous puissions reproduire "
|
|
|
+"le bug."
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/02_Github.md:50
|
|
|
+#, no-wrap
|
|
|
+msgid "What results have I achieved?"
|
|
|
+msgstr "Quels résultats ai-je obtenus ?"
|
|
|
+
|
|
|
+#. 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 "
|
|
|
+"logs."
|
|
|
+msgstr ""
|
|
|
+"Le bug : ce que vous voyez qui n'aurez pas dû se passer. Ici vous pouvez "
|
|
|
+"fournir les logs."
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/02_Github.md:54
|
|
|
+#, no-wrap
|
|
|
+msgid "What was the expected result?"
|
|
|
+msgstr "Quel était le résultat attendu ?"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/02_Github.md:57
|
|
|
+msgid "So that we understand what you consider to be the problem."
|
|
|
+msgstr ""
|
|
|
+"Afin que nous comprenions bien où est le problème... au moins selon vous :p"
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/02_Github.md:58
|
|
|
+#, no-wrap
|
|
|
+msgid "What are my circumstances?"
|
|
|
+msgstr "Quelle est ma situation ?"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/02_Github.md:61
|
|
|
+msgid "Remember to give the following information if you know it:"
|
|
|
+msgstr "Pensez à donner les informations suivantes si vous les connaissez :"
|
|
|
+
|
|
|
+#. type: Bullet: ' 1. '
|
|
|
+#: en/./developers/02_Github.md:67
|
|
|
+msgid "Which browser? Which version?"
|
|
|
+msgstr "Quel navigateur ? Quelle version ?"
|
|
|
+
|
|
|
+#. type: Bullet: ' 2. '
|
|
|
+#: en/./developers/02_Github.md:67
|
|
|
+msgid "Which server: Apache, Nginx? Which version?"
|
|
|
+msgstr "Quel serveur : Apache, Nginx ? Quelle version ?"
|
|
|
+
|
|
|
+#. type: Bullet: ' 3. '
|
|
|
+#: en/./developers/02_Github.md:67
|
|
|
+msgid "Which version of PHP?"
|
|
|
+msgstr "Quelle version de PHP ?"
|
|
|
+
|
|
|
+#. type: Bullet: ' 4. '
|
|
|
+#: en/./developers/02_Github.md:67
|
|
|
+msgid "Which database: SQLite, MySQL, MariaDB, PostgreSQL? Which version?"
|
|
|
+msgstr ""
|
|
|
+"Quelle base de données : SQLite, MySQL, MariaDB, PostgreSQL ? Quelle "
|
|
|
+"version ?"
|
|
|
+
|
|
|
+#. type: Bullet: ' 5. '
|
|
|
+#: en/./developers/02_Github.md:67
|
|
|
+msgid "Which distribution runs on the server? And... which version?"
|
|
|
+msgstr "Quelle distribution sur le serveur ? Et… quelle version ?"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/02_Github.md:68
|
|
|
+#, no-wrap
|
|
|
+msgid "Branching"
|
|
|
+msgstr "Système de branches"
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./developers/02_Github.md:70
|
|
|
+#, no-wrap
|
|
|
+msgid "Basic"
|
|
|
+msgstr "Élémentaire"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/02_Github.md:72
|
|
|
+msgid ""
|
|
|
+"If you are new to Git, here are some of the resources you might find useful:"
|
|
|
+msgstr ""
|
|
|
+"Si vous êtes novice dans Git, voici quelques ressources qui pourraient vous "
|
|
|
+"être utiles :"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/02_Github.md:77
|
|
|
+msgid "[GitHub's blog post](https://github.com/blog/120-new-to-git)"
|
|
|
+msgstr "[Article du blog de GitHub](https://github.com/blog/120-new-to-git)"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/02_Github.md:77
|
|
|
+msgid "<http://try.github.com/>"
|
|
|
+msgstr "<http://try.github.com/>"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/02_Github.md:77
|
|
|
+msgid "<http://sixrevisions.com/resources/git-tutorials-beginners/>"
|
|
|
+msgstr "<http://sixrevisions.com/resources/git-tutorials-beginners/>"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/02_Github.md:77
|
|
|
+msgid "<http://rogerdudler.github.io/git-guide/>"
|
|
|
+msgstr "<http://rogerdudler.github.io/git-guide/>"
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./developers/02_Github.md:78
|
|
|
+#, no-wrap
|
|
|
+msgid "Getting the latest code from the FreshRSS repository"
|
|
|
+msgstr "Obtenir le dernier code du répertoire FreshRSS"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/02_Github.md:80
|
|
|
+msgid "First you need to add the official repo to your remote repo list:"
|
|
|
+msgstr ""
|
|
|
+"Vous devez avant tout ajouter le repo officiel à votre liste de repo remote :"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/02_Github.md:80
|
|
|
+#, no-wrap
|
|
|
+msgid "git remote add upstream git@github.com:FreshRSS/FreshRSS.git\n"
|
|
|
+msgstr "git remote add upstream git@github.com:FreshRSS/FreshRSS.git\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/02_Github.md:85
|
|
|
+msgid "You can verify the remote repo is successfully added by using:"
|
|
|
+msgstr ""
|
|
|
+"Vous pouvez vérifier que le repo remote a été ajouté avec succès en "
|
|
|
+"utilisant :"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/02_Github.md:85
|
|
|
+#, no-wrap
|
|
|
+msgid "git remote -v show\n"
|
|
|
+msgstr "git remote -v show\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/02_Github.md:90
|
|
|
+msgid "Now you can pull the latest development code:"
|
|
|
+msgstr "Vous pouvez maintenant pull le dernier code de développement :"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/02_Github.md:90
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"git checkout dev\n"
|
|
|
+"git pull upstream dev\n"
|
|
|
+msgstr ""
|
|
|
+"git checkout dev\n"
|
|
|
+"git pull upstream dev\n"
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./developers/02_Github.md:95
|
|
|
+#, no-wrap
|
|
|
+msgid "Starting a new development branch"
|
|
|
+msgstr "Lancer une nouvelle branche de développement"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/02_Github.md:96
|
|
|
+#, no-wrap
|
|
|
+msgid "git checkout -b my-development-branch\n"
|
|
|
+msgstr "git checkout -b mon-branch-developpement\n"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/02_Github.md:100
|
|
|
+#, no-wrap
|
|
|
+msgid "Sending a patch"
|
|
|
+msgstr "Proposer un patch"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/02_Github.md:102
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"# Add the changed file, here actualize_script.php\n"
|
|
|
+"git add app/actualize_script.php\n"
|
|
|
+"# Commit the change and write a proper commit message\n"
|
|
|
+"git commit\n"
|
|
|
+"# Double check all looks well\n"
|
|
|
+"git show\n"
|
|
|
+"# Push it to your fork\n"
|
|
|
+"git push\n"
|
|
|
+msgstr ""
|
|
|
+"# Ajoutez le fichier modifié, ici actualize_script.php\n"
|
|
|
+"git add app/actualize_script.php\n"
|
|
|
+"# Commitez le changement et écrivez un message de commit approprié.\n"
|
|
|
+"git commit\n"
|
|
|
+"# Vérifiez deux fois que tout a l'air d'aller bien\n"
|
|
|
+"git show\n"
|
|
|
+"# Poussez les changements sur ton fork\n"
|
|
|
+"git push\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/02_Github.md:114
|
|
|
+msgid ""
|
|
|
+"Now you can create a PR based on your branch. Please make sure to file it "
|
|
|
+"against the `dev` branch!"
|
|
|
+msgstr ""
|
|
|
+"Vous pouvez maintenant créer un PR en fonction de votre branche. S'il vous "
|
|
|
+"plaît, assurez-vous de le soumettre contre la branche `dev` !"
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./developers/02_Github.md:115
|
|
|
+#, no-wrap
|
|
|
+msgid "How to write a commit message"
|
|
|
+msgstr "Comment écrire un message de commit"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/02_Github.md:118
|
|
|
+msgid ""
|
|
|
+"A commit message should succintly describe the changes on the first line. "
|
|
|
+"For example:"
|
|
|
+msgstr ""
|
|
|
+"Un message de commit devrait décrire succinctement les changements sur la "
|
|
|
+"première ligne. Par exemple :"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/02_Github.md:120
|
|
|
+#, no-wrap
|
|
|
+msgid "> Fix broken icon\n"
|
|
|
+msgstr "> Fixe une icône cassée\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/02_Github.md:122
|
|
|
+msgid ""
|
|
|
+"If necessary, this can be followed by a blank line and a longer explanation."
|
|
|
+msgstr ""
|
|
|
+"Si nécessaire, une ligne blanche et une explication plus longue peuvent le "
|
|
|
+"suivre."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/02_Github.md:123
|
|
|
+msgid "For further tips, see [here](https://chris.beams.io/posts/git-commit/)."
|
|
|
+msgstr ""
|
|
|
+"Pour d'autres conseils, voir [ici](https://chris.beams.io/posts/git-commit/)."
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/03_Backend/02_Minz.md:1
|
|
|
+#, no-wrap
|
|
|
+msgid "Models"
|
|
|
+msgstr "Modèles"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/03_Backend/02_Minz.md:5
|
|
|
+#, no-wrap
|
|
|
+msgid "Controllers and actions"
|
|
|
+msgstr "Contrôleurs et actions"
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/03_Backend/02_Minz.md:9
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:69
|
|
|
+#, no-wrap
|
|
|
+msgid "Views"
|
|
|
+msgstr "Vues"
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/03_Backend/02_Minz.md:13
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:39
|
|
|
+#, no-wrap
|
|
|
+msgid "Routing"
|
|
|
+msgstr "Routage"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/03_Backend/02_Minz.md:17
|
|
|
+#, no-wrap
|
|
|
+msgid "Writing URL"
|
|
|
+msgstr "Écriture des URL"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/03_Backend/02_Minz.md:21
|
|
|
+#: en/./developers/04_Frontend/01_View_files.md:13
|
|
|
+#, no-wrap
|
|
|
+msgid "Internationalisation"
|
|
|
+msgstr "Internationalisation"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/03_Backend/02_Minz.md:25
|
|
|
+#, no-wrap
|
|
|
+msgid "Understanding internals"
|
|
|
+msgstr "Comprendres les mécanismes internes"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/03_Backend/04_Changing_source_code.md:1
|
|
|
+#, no-wrap
|
|
|
+msgid "Accessing the database"
|
|
|
+msgstr "Accès à la base de données"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/03_Backend/04_Changing_source_code.md:5
|
|
|
+#, no-wrap
|
|
|
+msgid "Writing an action and its related view"
|
|
|
+msgstr "Écrire une action et sa vue associée"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/03_Backend/04_Changing_source_code.md:9
|
|
|
+#, no-wrap
|
|
|
+msgid "Authentication"
|
|
|
+msgstr "Gestion de l'authentification"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/03_Backend/04_Changing_source_code.md:13
|
|
|
+#, no-wrap
|
|
|
+msgid "Logs"
|
|
|
+msgstr "Gestion des logs"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:1
|
|
|
+#, no-wrap
|
|
|
+msgid "Writing extensions for FreshRSS"
|
|
|
+msgstr "Écriture d'extensions pour FreshRSS"
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:3
|
|
|
+#, no-wrap
|
|
|
+msgid "About FreshRSS"
|
|
|
+msgstr "Présentation de FreshRSS"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:6
|
|
|
+msgid ""
|
|
|
+"FreshRSS is an RSS / Atom feed aggregator written in PHP dating back to "
|
|
|
+"October 2012. The official site is located at [freshrss.org](https://"
|
|
|
+"freshrss.org) and the official repository is hosted on Github: [github.com/"
|
|
|
+"FreshRSS/FreshRSS](https://github.com/FreshRSS/FreshRSS)."
|
|
|
+msgstr ""
|
|
|
+"FreshRSS est un agrégateur de flux RSS / Atom écrit en PHP depuis octobre "
|
|
|
+"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)."
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:7
|
|
|
+#, no-wrap
|
|
|
+msgid "The problem"
|
|
|
+msgstr "Problème à résoudre"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:10
|
|
|
+msgid "FreshRSS is limited in its technical possibilities by various factors:"
|
|
|
+msgstr ""
|
|
|
+"FreshRSS est limité dans ses possibilités techniques par différents "
|
|
|
+"facteurs :"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:14
|
|
|
+msgid "The number of developers"
|
|
|
+msgstr "La disponibilité des développeurs principaux ;"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:14
|
|
|
+msgid "The will to integrate certain changes"
|
|
|
+msgstr "La volonté d'intégrer certains changements ;"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:14
|
|
|
+msgid "The level of \"hacking\" required to integrate marginal features"
|
|
|
+msgstr ""
|
|
|
+"Le niveau de « hack » nécessaire pour intégrer des fonctionnalités à la "
|
|
|
+"marge."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:16
|
|
|
+msgid ""
|
|
|
+"While the first limitation can, in theory, be lifted by the participation of "
|
|
|
+"new contributors to the project, it depends on the willingness of "
|
|
|
+"contributors to take an interest in the source code of the entire project. "
|
|
|
+"In order to remove the other two limitations, most of the time it will be "
|
|
|
+"necessary to create a \"fork\"."
|
|
|
+msgstr ""
|
|
|
+"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 entier. "
|
|
|
+"Afin de lever les deux autres limitations quant à elles, il faudra la "
|
|
|
+"plupart du temps passer par un « à-coté » souvent synonyme de « fork »."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:18
|
|
|
+msgid ""
|
|
|
+"Another solution consists of an extension system. By allowing users to write "
|
|
|
+"their own extension without taking an interest in the core of the basic "
|
|
|
+"software, we allow for:"
|
|
|
+msgstr ""
|
|
|
+"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 :"
|
|
|
+
|
|
|
+#. type: Bullet: '1. '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:22
|
|
|
+msgid "Reducing the amount of source code a new contributor has to take in"
|
|
|
+msgstr ""
|
|
|
+"De réduire la quantité de code source à assimiler pour un nouveau "
|
|
|
+"contributeur ;"
|
|
|
+
|
|
|
+#. type: Bullet: '2. '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:22
|
|
|
+msgid "Unofficial integration of novelties"
|
|
|
+msgstr "De permettre d'intégrer des nouveautés de façon non-officielles ;"
|
|
|
+
|
|
|
+#. type: Bullet: '3. '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:22
|
|
|
+msgid "No forking or main developer approval required."
|
|
|
+msgstr ""
|
|
|
+"De se passer des développeurs principaux pour d'éventuelles améliorations "
|
|
|
+"sans passer par la case « fork »."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:24
|
|
|
+msgid ""
|
|
|
+"Note: it is quite conceivable that the functionalities of an extension can "
|
|
|
+"later be officially integrated into the FreshRSS code. Extensions make it "
|
|
|
+"easy to propose a proof of concept."
|
|
|
+msgstr ""
|
|
|
+"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."
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:25
|
|
|
+#, no-wrap
|
|
|
+msgid "Understanding basic mechanics (Minz and MVC)"
|
|
|
+msgstr "Comprendre les mécaniques de base (Minz et MVC)"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:28
|
|
|
+#, no-wrap
|
|
|
+msgid "**TODO** : move to 02_Minz.md\n"
|
|
|
+msgstr "**TODO** : bouger dans 02_Minz.md\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:30
|
|
|
+msgid ""
|
|
|
+"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)."
|
|
|
+msgstr ""
|
|
|
+"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 module "
|
|
|
+"`Minz_Translate` par exemple)."
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:31
|
|
|
+#, no-wrap
|
|
|
+msgid "MVC Architecture"
|
|
|
+msgstr "Architecture MVC"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:34
|
|
|
+msgid ""
|
|
|
+"Minz relies on and imposes an MVC architecture on projects using it. This "
|
|
|
+"architecture consists of three main components:"
|
|
|
+msgstr ""
|
|
|
+"Minz repose et impose une architecture MVC pour les projets l'utilisant. On "
|
|
|
+"distingue dans cette architecture trois composants principaux :"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:38
|
|
|
+msgid ""
|
|
|
+"The model: this is the base object that we will manipulate. In FreshRSS, "
|
|
|
+"categories, flows and articles are templates. The part of the code that "
|
|
|
+"makes it possible to manipulate them in a database is also part of the model "
|
|
|
+"but is separated from the base model: we speak of DAO (for \"Data Access "
|
|
|
+"Object\"). The templates are stored in a `Models` folder."
|
|
|
+msgstr ""
|
|
|
+"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`."
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:38
|
|
|
+msgid ""
|
|
|
+"The view: this is what the user sees. The view is therefore simply HTML code "
|
|
|
+"mixed with PHP to display dynamic information. The views are stored in a "
|
|
|
+"`views` folder."
|
|
|
+msgstr ""
|
|
|
+"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`."
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:38
|
|
|
+msgid ""
|
|
|
+"The controller: this is what makes it possible to link models and views. "
|
|
|
+"Typically, a controller will load templates from the database (like a list "
|
|
|
+"of items) to \"pass\" them to a view for display. Controllers are stored in "
|
|
|
+"a `Controllers` directory."
|
|
|
+msgstr ""
|
|
|
+"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 répertoire "
|
|
|
+"`Controllers`."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:42
|
|
|
+msgid ""
|
|
|
+"In order to link a URL to a controller, first you have to go through a "
|
|
|
+"\"routing\" phase. In FreshRSS, this is particularly simple because it "
|
|
|
+"suffices to specify the name of the controller to load into the URL using a "
|
|
|
+"`c` parameter. For example, the address http://exemple.com?c=hello will "
|
|
|
+"execute the code contained in the `hello` controller."
|
|
|
+msgstr ""
|
|
|
+"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 "
|
|
|
+"contenu dans le contrôleur `hello`."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:44
|
|
|
+msgid ""
|
|
|
+"One concept that has not yet been discussed is the \"actions\" system. An "
|
|
|
+"action is executed *on* a controller. Concretely, a controller is "
|
|
|
+"represented by a class and its actions by methods. To execute an action, it "
|
|
|
+"is necessary to specify an `a` parameter in the URL."
|
|
|
+msgstr ""
|
|
|
+"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."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:46
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:165
|
|
|
+msgid "Code example:"
|
|
|
+msgstr "Exemple de code :"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:47
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"<?php\n"
|
|
|
+"\n"
|
|
|
+"class FreshRSS_hello_Controller extends Minz_ActionController {\n"
|
|
|
+"\tpublic function indexAction() {\n"
|
|
|
+"\t\t$this->view->a_variable = 'FooBar';\n"
|
|
|
+"\t}\n"
|
|
|
+"\n"
|
|
|
+"\tpublic function worldAction() {\n"
|
|
|
+"\t\t$this->view->a_variable = 'Hello World!';\n"
|
|
|
+"\t}\n"
|
|
|
+"}\n"
|
|
|
+"\n"
|
|
|
+"?>\n"
|
|
|
+msgstr ""
|
|
|
+"<?php\n"
|
|
|
+"\n"
|
|
|
+"class FreshRSS_hello_Controller extends Minz_ActionController {\n"
|
|
|
+"\tpublic function indexAction() {\n"
|
|
|
+"\t\t$this->view->a_variable = 'FooBar';\n"
|
|
|
+"\t}\n"
|
|
|
+"\n"
|
|
|
+"\tpublic function worldAction() {\n"
|
|
|
+"\t\t$this->view->a_variable = 'Hello World!';\n"
|
|
|
+"\t}\n"
|
|
|
+"}\n"
|
|
|
+"\n"
|
|
|
+"?>\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:64
|
|
|
+msgid ""
|
|
|
+"When loading the address http://exemple.com?c=hello&a=world, the `world` "
|
|
|
+"action is executed on the `hello` controller."
|
|
|
+msgstr ""
|
|
|
+"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`."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:66
|
|
|
+msgid ""
|
|
|
+"Note: if `c` or `a` is not specified, the default value for each of these "
|
|
|
+"variables is `index`. So the address http://exemple.com?c=hello will execute "
|
|
|
+"the `index` action of the `hello` controller."
|
|
|
+msgstr ""
|
|
|
+"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`."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:68
|
|
|
+msgid ""
|
|
|
+"From now on, the `hello/world` naming convention will be used to refer to a "
|
|
|
+"controller/action pair."
|
|
|
+msgstr ""
|
|
|
+"Plus loin, sera utilisée la convention `hello/world` pour évoquer un couple "
|
|
|
+"contrôleur/action."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:72
|
|
|
+msgid ""
|
|
|
+"Each view is associated with a controller and an action. The view associated "
|
|
|
+"with `hello/world` will be stored in a very specific file: `views/hello/"
|
|
|
+"world. phtml`. This convention is imposed by Minz."
|
|
|
+msgstr ""
|
|
|
+"Chaque vue est associée à un contrôleur et à une action. La vue associée à "
|
|
|
+"`hello/world` va être stockée dans un fichier bien spécifique : `views/hello/"
|
|
|
+"world.phtml`. Cette convention est imposée par Minz."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:74
|
|
|
+msgid ""
|
|
|
+"As explained above, the views consist of HTML mixed with PHP. Code example:"
|
|
|
+msgstr ""
|
|
|
+"Comme expliqué plus haut, les vues sont du code HTML mixé à du PHP. Exemple "
|
|
|
+"de code :"
|
|
|
+
|
|
|
+#. type: Code fence info string
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:75
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:120
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:248
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:284
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:351
|
|
|
+#, no-wrap
|
|
|
+msgid "html"
|
|
|
+msgstr "html"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:75
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"<p>\n"
|
|
|
+"\tThis is a parameter passed from the controller: <?= $this->a_variable ?>\n"
|
|
|
+"</p>\n"
|
|
|
+msgstr ""
|
|
|
+"<p>\n"
|
|
|
+"\tPhrase passée en paramètre : <?= $this->a_variable ?>\n"
|
|
|
+"</p>\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:82
|
|
|
+#, no-wrap
|
|
|
+msgid "The variable `$this->a_variable` is passed by the controller (see previous example). The difference is that in the controller it is necessary to pass `$this->view`, while in the view `$this` suffices.\n"
|
|
|
+msgstr "La variable `$this->a_variable` a été passée précédemment par le contrôleur (voir exemple précédent). La différence est que dans le contrôleur il est nécessaire de passer par `$this->view` et que dans la vue `$this` suffit.\n"
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:83
|
|
|
+#, no-wrap
|
|
|
+msgid "Working with GET / POST"
|
|
|
+msgstr "Accéder aux paramètres GET / POST"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:87
|
|
|
+msgid ""
|
|
|
+"It is often necessary to take advantage of parameters passed by GET or POST. "
|
|
|
+"In Minz, these parameters are accessible using the `Minz_Request` class. "
|
|
|
+"Code example:"
|
|
|
+msgstr ""
|
|
|
+"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 :"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:88
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"<?php\n"
|
|
|
+"\n"
|
|
|
+"$default_value = 'foo';\n"
|
|
|
+"$param = Minz_Request::param('bar', $default_value);\n"
|
|
|
+"\n"
|
|
|
+"// Display the value of the parameter `bar` (passed via GET or POST)\n"
|
|
|
+"// or \"foo\" if the parameter does not exist.\n"
|
|
|
+"echo $param;\n"
|
|
|
+"\n"
|
|
|
+"// Sets the value of the `bar` parameter\n"
|
|
|
+"Minz_Request::_param('bar', 'baz');\n"
|
|
|
+"\n"
|
|
|
+"// Will necessarily display \"baz\" since we have just forced its value.\n"
|
|
|
+"// Note that the second parameter (default) is optional.\n"
|
|
|
+"echo Minz_Request::param('bar');\n"
|
|
|
+"\n"
|
|
|
+"?>\n"
|
|
|
+msgstr ""
|
|
|
+"<?php\n"
|
|
|
+"\n"
|
|
|
+"$default_value = 'foo';\n"
|
|
|
+"$param = Minz_Request::param('bar', $default_value);\n"
|
|
|
+"\n"
|
|
|
+"// Affichera la valeur du paramètre `bar` (passé via GET ou POST)\n"
|
|
|
+"// ou \"foo\" si le paramètre n'existe pas.\n"
|
|
|
+"echo $param;\n"
|
|
|
+"\n"
|
|
|
+"// Force la valeur du paramètre `bar`\n"
|
|
|
+"Minz_Request::_param('bar', 'baz');\n"
|
|
|
+"\n"
|
|
|
+"// Affichera forcément \"baz\" puisque nous venons de forcer sa valeur.\n"
|
|
|
+"// Notez que le second paramètre (valeur par défaut) est facultatif.\n"
|
|
|
+"echo Minz_Request::param('bar');\n"
|
|
|
+"\n"
|
|
|
+"?>\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:109
|
|
|
+msgid ""
|
|
|
+"The `Minz_Request::isPost()` method can be used to execute a piece of code "
|
|
|
+"only if it is a POST request."
|
|
|
+msgstr ""
|
|
|
+"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."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:111
|
|
|
+msgid ""
|
|
|
+"Note: it is preferable to use `Minz_Request` only in controllers. It is "
|
|
|
+"likely that you will encounter this method in FreshRSS views, or even in "
|
|
|
+"templates, but be aware that this is **not** good practice."
|
|
|
+msgstr ""
|
|
|
+"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."
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:112
|
|
|
+#, no-wrap
|
|
|
+msgid "Access session settings"
|
|
|
+msgstr "Accéder aux paramètres de session"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:115
|
|
|
+msgid ""
|
|
|
+"The access to session parameters is strangely similar to the GET / POST "
|
|
|
+"parameters but passes through the `Minz_Session` class this time! There is "
|
|
|
+"no example here because you can repeat the previous example by changing all "
|
|
|
+"`Minz_Request` to `Minz_Session`."
|
|
|
+msgstr ""
|
|
|
+"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`."
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:116
|
|
|
+#, no-wrap
|
|
|
+msgid "Working with URLs"
|
|
|
+msgstr "Gestion des URL"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:119
|
|
|
+msgid ""
|
|
|
+"To take full advantage of the Minz routing system, it is strongly "
|
|
|
+"discouraged to write hard URLs in your code. For example, the following view "
|
|
|
+"should be avoided:"
|
|
|
+msgstr ""
|
|
|
+"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 "
|
|
|
+"suivante doit être évitée :"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:120
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"<p>\n"
|
|
|
+"\tGo to page <a href=\"http://example.com?c=hello&a=world\">Hello world</a>!\n"
|
|
|
+"</p>\n"
|
|
|
+msgstr ""
|
|
|
+"<p>\n"
|
|
|
+"\tAccéder à la page <a href=\"http://exemple.com?c=hello&a=world\">Hello world</a>!\n"
|
|
|
+"</p>\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:127
|
|
|
+msgid ""
|
|
|
+"If one day it was decided to use a \"url rewriting\" system to have "
|
|
|
+"addresses in a http://exemple.com/controller/action format, all previous "
|
|
|
+"addresses would become ineffective!"
|
|
|
+msgstr ""
|
|
|
+"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 !"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:129
|
|
|
+msgid ""
|
|
|
+"So use the `Minz_Url` class and its `display()` method instead. `Minz_Url::"
|
|
|
+"display()` takes an array of the following form as its argument:"
|
|
|
+msgstr ""
|
|
|
+"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 :"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:130
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"<?php\n"
|
|
|
+"\n"
|
|
|
+"$url_array = [\n"
|
|
|
+"\t'c' => 'hello',\n"
|
|
|
+"\t'a' => 'world',\n"
|
|
|
+"\t'params' => [\n"
|
|
|
+"\t\t'foo' => 'bar',\n"
|
|
|
+"\t],\n"
|
|
|
+"];\n"
|
|
|
+"\n"
|
|
|
+"// Show something like .?c=hello&a=world&foo=bar\n"
|
|
|
+"echo Minz_Url::display($url_array);\n"
|
|
|
+"\n"
|
|
|
+"?>\n"
|
|
|
+msgstr ""
|
|
|
+"<?php\n"
|
|
|
+"\n"
|
|
|
+"$url_array = [\n"
|
|
|
+"\t'c' => 'hello',\n"
|
|
|
+"\t'a' => 'world',\n"
|
|
|
+"\t'params' => [\n"
|
|
|
+"\t\t'foo' => 'bar',\n"
|
|
|
+"\t],\n"
|
|
|
+"];\n"
|
|
|
+"\n"
|
|
|
+"// Affichera quelque chose comme .?c=hello&a=world&foo=bar\n"
|
|
|
+"echo Minz_Url::display($url_array);\n"
|
|
|
+"\n"
|
|
|
+"?>\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:148
|
|
|
+msgid ""
|
|
|
+"Since this can become a bit tedious to use in the long run, especially in "
|
|
|
+"views, it is preferable to use the `_url()` shortcut:"
|
|
|
+msgstr ""
|
|
|
+"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()` :"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:149
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"<?php\n"
|
|
|
+"\n"
|
|
|
+"// Displays the same as above\n"
|
|
|
+"echo _url('hello', 'world', 'foo', 'bar');\n"
|
|
|
+"\n"
|
|
|
+"?>\n"
|
|
|
+msgstr ""
|
|
|
+"<?php\n"
|
|
|
+"\n"
|
|
|
+"// Affichera la même chose que précédemment\n"
|
|
|
+"echo _url('hello', 'world', 'foo', 'bar');\n"
|
|
|
+"\n"
|
|
|
+"?>\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:159
|
|
|
+msgid ""
|
|
|
+"Note: as a general rule, the shortened form (`_url()`) should be used in "
|
|
|
+"views, while the long form (`Minz_Url::display()`) should be used in "
|
|
|
+"controllers."
|
|
|
+msgstr ""
|
|
|
+"Note : en règle générale, la forme raccourcie (`_url()`) doit être utilisée "
|
|
|
+"dans les vues tandis que la forme longue (`Minz_Url::display()`) doit être "
|
|
|
+"utilisée dans les contrôleurs."
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:160
|
|
|
+#, no-wrap
|
|
|
+msgid "Redirections"
|
|
|
+msgstr "Redirections"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:163
|
|
|
+msgid ""
|
|
|
+"It is often necessary to redirect a user to another page. To do so, the "
|
|
|
+"`Minz_Request` class offers another useful method: `forward()`. This method "
|
|
|
+"takes the same URL format as the one seen just before as its argument."
|
|
|
+msgstr ""
|
|
|
+"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 celui "
|
|
|
+"vu juste avant."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:166
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"<?php\n"
|
|
|
+"\n"
|
|
|
+"$url_array = [\n"
|
|
|
+"\t'c' => 'hello',\n"
|
|
|
+"\t'a' => 'world',\n"
|
|
|
+"];\n"
|
|
|
+"\n"
|
|
|
+"// Tells Minz to redirect the user to the hello / world page.\n"
|
|
|
+"// Note that this is a redirection in the Minz sense of the term, not a redirection that the browser will have to manage (HTTP code 301 or 302)\n"
|
|
|
+"// The code that follows forward() will thus be executed!\n"
|
|
|
+"Minz_Request::forward($url_array);\n"
|
|
|
+"\n"
|
|
|
+"// To perform a type 302 redirect, add \"true\".\n"
|
|
|
+"// The code that follows will never be executed.\n"
|
|
|
+"Minz_Request::forward($url_array, true);\n"
|
|
|
+"\n"
|
|
|
+"?>\n"
|
|
|
+msgstr ""
|
|
|
+"<?php\n"
|
|
|
+"\n"
|
|
|
+"$url_array = [\n"
|
|
|
+"\t'c' => 'hello',\n"
|
|
|
+"\t'a' => 'world',\n"
|
|
|
+"];\n"
|
|
|
+"\n"
|
|
|
+"// Indique à Minz de rediriger l'utilisateur vers la page hello/world.\n"
|
|
|
+"// 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)\n"
|
|
|
+"// Le code qui suit forward() va ainsi être exécuté !\n"
|
|
|
+"Minz_Request::forward($url_array);\n"
|
|
|
+"\n"
|
|
|
+"// Pour effectuer une redirection type 302, ajoutez \"true\".\n"
|
|
|
+"// Le code qui suivra ne sera alors jamais exécuté.\n"
|
|
|
+"Minz_Request::forward($url_array, true);\n"
|
|
|
+"\n"
|
|
|
+"?>\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:187
|
|
|
+msgid ""
|
|
|
+"It is very common to want display a message to the user while performing a "
|
|
|
+"redirect, to tell the user how the action was carried out (validation of a "
|
|
|
+"form for example). Such a message is passed through a `notification` session "
|
|
|
+"variable (note: we will talk about feedback from now on to avoid confusion "
|
|
|
+"with a notification that can occur at any time). To facilitate this kind of "
|
|
|
+"very frequent action, there are two shortcuts that both perform a 302 "
|
|
|
+"redirect by assigning a feedback message:"
|
|
|
+msgstr ""
|
|
|
+"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 "
|
|
|
+"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 "
|
|
|
+"une redirection type 302 en affectant un message de feedback :"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:188
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"<?php\n"
|
|
|
+"\n"
|
|
|
+"$url_array = [\n"
|
|
|
+"\t'c' => 'hello',\n"
|
|
|
+"\t'a' => 'world',\n"
|
|
|
+"];\n"
|
|
|
+"$feedback_good = 'All went well!';\n"
|
|
|
+"$feedback_bad = 'Oops, something went wrong.';\n"
|
|
|
+"\n"
|
|
|
+"Minz_Request::good($feedback_good, $url_array);\n"
|
|
|
+"\n"
|
|
|
+"// or\n"
|
|
|
+"\n"
|
|
|
+"Minz_Request::bad($feedback_bad, $url_array);\n"
|
|
|
+"\n"
|
|
|
+"?>\n"
|
|
|
+msgstr ""
|
|
|
+"<?php\n"
|
|
|
+"\n"
|
|
|
+"$url_array = [\n"
|
|
|
+"\t'c' => 'hello',\n"
|
|
|
+"\t'a' => 'world',\n"
|
|
|
+"];\n"
|
|
|
+"$feedback_good = 'Tout s\\'est bien passé !';\n"
|
|
|
+"$feedback_bad = 'Oups, quelque chose n\\'a pas marché.';\n"
|
|
|
+"\n"
|
|
|
+"Minz_Request::good($feedback_good, $url_array);\n"
|
|
|
+"\n"
|
|
|
+"// ou\n"
|
|
|
+"\n"
|
|
|
+"Minz_Request::bad($feedback_bad, $url_array);\n"
|
|
|
+"\n"
|
|
|
+"?>\n"
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:207
|
|
|
+#, no-wrap
|
|
|
+msgid "Translation Management"
|
|
|
+msgstr "Gestion de la traduction"
|
|
|
+
|
|
|
+#. 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 "
|
|
|
+"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 "
|
|
|
+"manage different languages in order not to remain confined to English or "
|
|
|
+"French."
|
|
|
+msgstr ""
|
|
|
+"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."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:212
|
|
|
+msgid ""
|
|
|
+"The solution is to use the `Minz_Translate` class, which allows dynamic "
|
|
|
+"translation of FreshRSS (or any Minz-based application). 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 `i18n`. "
|
|
|
+"For example, English language files are located in `i18n/fr/`. There are "
|
|
|
+"seven different files:"
|
|
|
+msgstr ""
|
|
|
+"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 "
|
|
|
+"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 :"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:220
|
|
|
+msgid "`admin.php` for anything related to FreshRSS administration"
|
|
|
+msgstr ""
|
|
|
+"`admin.php` pour tout ce qui est relatif à l'administration de FreshRSS ;"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:220
|
|
|
+msgid "`conf.php` for configuration"
|
|
|
+msgstr "`conf.php` pour l'aspect configuration ;"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:220
|
|
|
+msgid "`feedback.php` contains translations of feedback messages"
|
|
|
+msgstr "`feedback.php` contient les traductions des messages de feedback ;"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:220
|
|
|
+msgid "`gen.php` stores what is global to FreshRSS (gen for \"general\")"
|
|
|
+msgstr "`gen.php` stocke ce qui est global à FreshRSS (gen pour « general ») ;"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:220
|
|
|
+msgid "`index.php` for the main page that lists feeds and the About page"
|
|
|
+msgstr ""
|
|
|
+"`index.php` pour la page principale qui liste les flux et la page « À propos "
|
|
|
+"» ;"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:220
|
|
|
+msgid "`install.php` contains strings related FreshRSS installation"
|
|
|
+msgstr ""
|
|
|
+"`install.php` contient les phrases relatives à l'installation de FreshRSS ;"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:220
|
|
|
+msgid "`sub.php` for subscription management (sub for \"subscription\")"
|
|
|
+msgstr ""
|
|
|
+"`sub.php` pour l'aspect gestion des abonnements (sub pour « subscription »)."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:222
|
|
|
+msgid ""
|
|
|
+"This organization makes it possible to avoid a single huge translation file."
|
|
|
+msgstr ""
|
|
|
+"Cette organisation permet de ne pas avoir un unique énorme fichier de "
|
|
|
+"traduction."
|
|
|
+
|
|
|
+#. 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 "
|
|
|
+"`app/i18n/fr/gen.php`:"
|
|
|
+msgstr ""
|
|
|
+"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` :"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:225
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"<?php\n"
|
|
|
+"\n"
|
|
|
+"return array(\n"
|
|
|
+"\t'action' => [\n"
|
|
|
+"\t\t'actualize' => 'Actualiser',\n"
|
|
|
+"\t\t'back_to_rss_feeds' => '← Retour à vos flux RSS',\n"
|
|
|
+"\t\t'cancel' => 'Annuler',\n"
|
|
|
+"\t\t'create' => 'Créer',\n"
|
|
|
+"\t\t'disable' => 'Désactiver',\n"
|
|
|
+"\t),\n"
|
|
|
+"\t'freshrss' => array(\n"
|
|
|
+"\t\t'_' => 'FreshRSS',\n"
|
|
|
+"\t\t'about' => 'À propos de FreshRSS',\n"
|
|
|
+"\t),\n"
|
|
|
+"];\n"
|
|
|
+"\n"
|
|
|
+"?>\n"
|
|
|
+msgstr ""
|
|
|
+"<?php\n"
|
|
|
+"\n"
|
|
|
+"return array(\n"
|
|
|
+"\t'action' => [\n"
|
|
|
+"\t\t'actualize' => 'Actualiser',\n"
|
|
|
+"\t\t'back_to_rss_feeds' => '← Retour à vos flux RSS',\n"
|
|
|
+"\t\t'cancel' => 'Annuler',\n"
|
|
|
+"\t\t'create' => 'Créer',\n"
|
|
|
+"\t\t'disable' => 'Désactiver',\n"
|
|
|
+"\t),\n"
|
|
|
+"\t'freshrss' => array(\n"
|
|
|
+"\t\t'_' => 'FreshRSS',\n"
|
|
|
+"\t\t'about' => 'À propos de FreshRSS',\n"
|
|
|
+"\t),\n"
|
|
|
+"];\n"
|
|
|
+"\n"
|
|
|
+"?>\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:247
|
|
|
+msgid ""
|
|
|
+"To access these translations, `Minz_Translate` will help us with its "
|
|
|
+"`Minz_Translate::t()` method. As this can be a bit long to type, a shortcut "
|
|
|
+"has been introduced that **must** be used in all circumstances: `_t()`. "
|
|
|
+"Code example:"
|
|
|
+msgstr ""
|
|
|
+"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 :"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:248
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"<p>\n"
|
|
|
+"\t<a href=\"<?= _url('index', 'index') ?>\">\n"
|
|
|
+"\t\t<?= _t('gen.action.back_to_rss_feeds') ?>\n"
|
|
|
+"\t</a>\n"
|
|
|
+"</p>\n"
|
|
|
+msgstr ""
|
|
|
+"<p>\n"
|
|
|
+"\t<a href=\"<?= _url('index', 'index') ?>\">\n"
|
|
|
+"\t\t<?= _t('gen.action.back_to_rss_feeds') ?>\n"
|
|
|
+"\t</a>\n"
|
|
|
+"</p>\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:257
|
|
|
+msgid ""
|
|
|
+"The string to pass to the `_t()` function consists of a series of "
|
|
|
+"identifiers separated by dots. The first identifier indicates from which "
|
|
|
+"file to extract the translation (in this case, `gen.php`), while the "
|
|
|
+"following ones indicate table entries. Thus `action` is an entry of the main "
|
|
|
+"array and `back_to_rss_feeds` is an entry of the `action` array. This allows "
|
|
|
+"us to further organize our translation files."
|
|
|
+msgstr ""
|
|
|
+"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 "
|
|
|
+"traduction."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:259
|
|
|
+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 "
|
|
|
+"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."
|
|
|
+msgstr ""
|
|
|
+"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 "
|
|
|
+"`_t('gen.freshrss')` suffit."
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:260
|
|
|
+#, no-wrap
|
|
|
+msgid "Configuration management"
|
|
|
+msgstr "Gestion de la configuration"
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:262
|
|
|
+#, no-wrap
|
|
|
+msgid "Write an extension for FreshRSS"
|
|
|
+msgstr "Écrire une extension pour FreshRSS"
|
|
|
+
|
|
|
+#. 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 "
|
|
|
+"themselves."
|
|
|
+msgstr ""
|
|
|
+"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."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:267
|
|
|
+msgid ""
|
|
|
+"An extension allows you to easily add functionality to FreshRSS without "
|
|
|
+"having to touch the core of the project directly."
|
|
|
+msgstr ""
|
|
|
+"Une extension permet donc d'ajouter des fonctionnalités facilement à "
|
|
|
+"FreshRSS sans avoir à toucher au cœur du projet directement."
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:268
|
|
|
+#, no-wrap
|
|
|
+msgid "Basic files and folders"
|
|
|
+msgstr "Les fichiers et répertoires de base"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:273
|
|
|
+msgid ""
|
|
|
+"The first thing to note is that **all** extensions **must** be located in "
|
|
|
+"the `extensions` directory, at the base of the FreshRSS tree. An extension "
|
|
|
+"is a directory containing a set of mandatory (and optional) files and "
|
|
|
+"subdirectories. The convention requires that the main directory name be "
|
|
|
+"preceded by an \"x\" to indicate that it is not an extension included by "
|
|
|
+"default in FreshRSS."
|
|
|
+msgstr ""
|
|
|
+"La première chose à noter est que **toutes** les extensions **doivent** se "
|
|
|
+"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."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:275
|
|
|
+msgid ""
|
|
|
+"The main directory of an extension must contain at least two **mandatory** "
|
|
|
+"files:"
|
|
|
+msgstr ""
|
|
|
+"Le répertoire principal d'une extension doit comporter au moins deux "
|
|
|
+"fichiers **obligatoire** :"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:278
|
|
|
+msgid ""
|
|
|
+"A `metadata.json` file that contains a description of the extension. This "
|
|
|
+"file is written in JSON."
|
|
|
+msgstr ""
|
|
|
+"Un fichier `metadata.json` qui contient une description de l'extension. Ce "
|
|
|
+"fichier est écrit en JSON ;"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:278
|
|
|
+msgid ""
|
|
|
+"An `extension.php` file containing the entry point of the extension (which "
|
|
|
+"is a class that inherits Minz_Extension)."
|
|
|
+msgstr "Un fichier `extension.php` contenant le point d'entrée de l'extension."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:282
|
|
|
+msgid ""
|
|
|
+"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 "
|
|
|
+"should follow our best practice: If you want to write a `HelloWorld` "
|
|
|
+"extension, the directory name should be `xExtension-HelloWorld` and the base "
|
|
|
+"class name `HelloWorldExtension`."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:284
|
|
|
+msgid ""
|
|
|
+"In the file `freshrss/extensions/xExtension-HelloWorld/extension.php` you "
|
|
|
+"need the structure:"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:284
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"class HelloWorldExtension extends Minz_Extension {\n"
|
|
|
+"\tpublic function init() {\n"
|
|
|
+"\t\t// your code here\n"
|
|
|
+"\t}\n"
|
|
|
+"}\n"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:292
|
|
|
+msgid ""
|
|
|
+"There is an example HelloWorld extension that you can download from [our "
|
|
|
+"GitHub repo](https://github.com/FreshRSS/xExtension-HelloWorld)."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:294
|
|
|
+msgid ""
|
|
|
+"You may also need additional files or subdirectories depending on your needs:"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:300
|
|
|
+msgid ""
|
|
|
+"`configure.phtml` is the file containing the form to parameterize your "
|
|
|
+"extension"
|
|
|
+msgstr ""
|
|
|
+"`configure.phtml` est le fichier contenant le formulaire pour paramétrer "
|
|
|
+"votre extension"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:300
|
|
|
+msgid ""
|
|
|
+"A `static/` directory containing CSS and JavaScript files that you will need "
|
|
|
+"for your extension (note that if you need to write a lot of CSS it may be "
|
|
|
+"more interesting to write a complete theme)"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:300
|
|
|
+msgid "A `Controllers` directory containing additional controllers"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:300
|
|
|
+msgid "An `i18n` directory containing additional translations"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:300
|
|
|
+msgid ""
|
|
|
+"`layout` and` views` directories to define new views or to overwrite the "
|
|
|
+"current views"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:302
|
|
|
+msgid ""
|
|
|
+"In addition, it is good to have a `LICENSE` file indicating the license "
|
|
|
+"under which your extension is distributed and a` README` file giving a "
|
|
|
+"detailed description of it."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:303
|
|
|
+#, no-wrap
|
|
|
+msgid "The metadata.json file"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:306
|
|
|
+msgid ""
|
|
|
+"The `metadata.json` file defines your extension through a number of "
|
|
|
+"important elements. It must contain a valid JSON array containing the "
|
|
|
+"following entries:"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:313
|
|
|
+msgid "`name`: the name of your extension"
|
|
|
+msgstr "`name` : le nom de votre extension ;"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:313
|
|
|
+msgid ""
|
|
|
+"`author`: your name, your e-mail address ... but there is no specific format "
|
|
|
+"to adopt"
|
|
|
+msgstr ""
|
|
|
+"`author` : votre nom, éventuellement votre adresse mail mais il n'y a pas de "
|
|
|
+"format spécifique à adopter ;"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:313
|
|
|
+msgid "`description`: a description of your extension"
|
|
|
+msgstr "`description` : une description de votre extension ;"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:313
|
|
|
+msgid "`version`: the current version number of the extension"
|
|
|
+msgstr "`version` : le numéro de version actuel de l'extension ;"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:313
|
|
|
+msgid ""
|
|
|
+"`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` (so if the entry point is `HelloWorld`, your class will be "
|
|
|
+"called` HelloWorldExtension`)"
|
|
|
+msgstr ""
|
|
|
+"`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`) ;"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:313
|
|
|
+msgid ""
|
|
|
+"`type`: Defines the type of your extension. There are two types: `system` "
|
|
|
+"and` user`. We will study this difference right after."
|
|
|
+msgstr ""
|
|
|
+"`type` : définit le type de votre extension. Il existe deux types : `system` "
|
|
|
+"et `user`. Nous étudierons cette différence juste après."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:315
|
|
|
+msgid "Only the `name` and` entrypoint` fields are required."
|
|
|
+msgstr "Seuls les champs `name` et `entrypoint` sont requis."
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:316
|
|
|
+#, no-wrap
|
|
|
+msgid "Choosing between `system` and `user`"
|
|
|
+msgstr "Choisir entre extension « system » ou « user »"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:319
|
|
|
+msgid ""
|
|
|
+"A __user__ extension can be enabled by some users and not by others "
|
|
|
+"(typically for user preferences)."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:321
|
|
|
+msgid "A __system__ extension in comparison is enabled for every account."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:322
|
|
|
+#, no-wrap
|
|
|
+msgid "Writing your own extension.php"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:327
|
|
|
+msgid ""
|
|
|
+"This file is the entry point of your extension. It must contain a specific "
|
|
|
+"class to function. As mentioned above, the name of the class must be your "
|
|
|
+"`entrypoint` suffixed by` Extension` (`HelloWorldExtension` for example). "
|
|
|
+"In addition, this class must be inherited from the `Minz_Extension` class to "
|
|
|
+"benefit from extensions-specific methods."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:329
|
|
|
+msgid "Your class will benefit from four methods to redefine:"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:334
|
|
|
+msgid ""
|
|
|
+"`install()` is called when a user clicks the button to activate your "
|
|
|
+"extension. It allows, for example, to update the database of a user in order "
|
|
|
+"to make it compatible with the extension. It returns `true` if everything "
|
|
|
+"went well or, if not, a string explaining the problem."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:334
|
|
|
+msgid ""
|
|
|
+"`uninstall()` is called when a user clicks the button to disable your "
|
|
|
+"extension. This will allow you to undo the database changes you potentially "
|
|
|
+"made in `install ()`. It returns `true` if everything went well or, if not, "
|
|
|
+"a string explaining the problem."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:334
|
|
|
+msgid ""
|
|
|
+"`init()` is called for every page load *if the extension is enabled*. It "
|
|
|
+"will therefore initialize the behavior of the extension. This is the most "
|
|
|
+"important method."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:334
|
|
|
+msgid ""
|
|
|
+"`handleConfigureAction()` is called when a user loads the extension "
|
|
|
+"management panel. Specifically, it is called when the `?"
|
|
|
+"c=extension&a=configured&e=name-of-your-extension` URL is loaded. You should "
|
|
|
+"also write here the behavior you want when validating the form in your "
|
|
|
+"`configure.phtml` file."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:336
|
|
|
+msgid ""
|
|
|
+"In addition, you will have a number of methods directly inherited from "
|
|
|
+"`Minz_Extension` that you should not redefine:"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:340
|
|
|
+msgid ""
|
|
|
+"The \"getters\" first: most are explicit enough not to detail them here - "
|
|
|
+"`getName()`, `getEntrypoint()`, `getPath()` (allows you to retrieve the path "
|
|
|
+"to your extension), `getAuthor()`, `getDescription()`, `getVersion()`, "
|
|
|
+"`getType()`."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:340
|
|
|
+msgid ""
|
|
|
+"`getFileUrl($filename, $type)` will return the URL to a file in the `static` "
|
|
|
+"directory. The first parameter is the name of the file (without `static /`), "
|
|
|
+"the second is the type of file to be used (`css` or` js`)."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:340
|
|
|
+msgid ""
|
|
|
+"`registerController($base_name)` will tell Minz to take into account the "
|
|
|
+"given controller in the routing system. The controller must be located in "
|
|
|
+"your `Controllers` directory, the name of the file must be` "
|
|
|
+"<base_name>Controller.php` and the name of the "
|
|
|
+"`FreshExtension_<base_name>_Controller` class."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:346
|
|
|
+msgid "`registerViews()`"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:346
|
|
|
+msgid "`registerTranslates()`"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:346
|
|
|
+msgid "`registerHook($hook_name, $hook_function)`"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:347
|
|
|
+#, no-wrap
|
|
|
+msgid "The \"hooks\" system"
|
|
|
+msgstr "Le système « hooks »"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:350
|
|
|
+msgid ""
|
|
|
+"You can register at the FreshRSS event system in an extensions `init()` "
|
|
|
+"method, to manipulate data when some of the core functions are executed."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:351
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"class HelloWorldExtension extends Minz_Extension\n"
|
|
|
+"{\n"
|
|
|
+"\tpublic function init() {\n"
|
|
|
+"\t\t$this->registerHook('entry_before_display', array($this, 'renderEntry'));\n"
|
|
|
+"\t}\n"
|
|
|
+"\tpublic function renderEntry($entry) {\n"
|
|
|
+"\t\t$entry->_content('<h1>Hello World</h1>' . $entry->content());\n"
|
|
|
+"\t\treturn $entry;\n"
|
|
|
+"\t}\n"
|
|
|
+"}\n"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:365
|
|
|
+msgid "The following events are available:"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:376
|
|
|
+msgid ""
|
|
|
+"`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."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:376
|
|
|
+msgid ""
|
|
|
+"`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."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:376
|
|
|
+msgid ""
|
|
|
+"`feed_before_insert` (`function($feed) -> Feed | null`): will be executed "
|
|
|
+"when a new feed is imported into the database. The new feed (instance of "
|
|
|
+"FreshRSS\\_Feed) will be passed as parameter."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:376
|
|
|
+msgid ""
|
|
|
+"`freshrss_init` (`function() -> none`): will be executed at the end of the "
|
|
|
+"initialization of FreshRSS, useful to initialize components or to do "
|
|
|
+"additional access checks"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:376
|
|
|
+msgid ""
|
|
|
+"`menu_admin_entry` (`function() -> string`): add an entry at the end of the "
|
|
|
+"\"Administration\" menu, the returned string must be valid HTML (e.g. `<li "
|
|
|
+"class=\"item active\"><a href=\"url\">New entry</a></li>`)"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:376
|
|
|
+msgid ""
|
|
|
+"`menu_configuration_entry` (`function() -> string`): add an entry at the end "
|
|
|
+"of the \"Configuration\" menu, the returned string must be valid HTML (e.g. "
|
|
|
+"`<li class=\"item active\"><a href=\"url\">New entry</a></li>`)"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:376
|
|
|
+msgid ""
|
|
|
+"`menu_other_entry` (`function() -> string`): add an entry at the end of the "
|
|
|
+"header dropdown menu (i.e. after the \"About\" entry), the returned string "
|
|
|
+"must be valid HTML (e.g. `<li class=\"item active\"><a href=\"url\">New "
|
|
|
+"entry</a></li>`)"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:376
|
|
|
+msgid ""
|
|
|
+"`nav_reading_modes` (`function($reading_modes) -> array | null`): **TODO** "
|
|
|
+"add documentation"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:376
|
|
|
+msgid "`post_update` (`function(none) -> none`): **TODO** add documentation"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:376
|
|
|
+msgid ""
|
|
|
+"`simplepie_before_init` (`function($simplePie, $feed) -> none`): **TODO** "
|
|
|
+"add documentation"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:377
|
|
|
+#, no-wrap
|
|
|
+msgid "Writing your own configure.phtml"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/03_Backend/05_Extensions.md:380
|
|
|
+msgid ""
|
|
|
+"When you want to support user configurations for your extension or simply "
|
|
|
+"display some information, you have to create the `configure.phtml` file."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/04_Frontend/01_View_files.md:1
|
|
|
+#, no-wrap
|
|
|
+msgid "The .phtml files"
|
|
|
+msgstr "Les fichiers .phtml"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/04_Frontend/01_View_files.md:5
|
|
|
+#, no-wrap
|
|
|
+msgid "Writing a URL"
|
|
|
+msgstr "Écrire une URL"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/04_Frontend/01_View_files.md:9
|
|
|
+#, no-wrap
|
|
|
+msgid "Displaying an icon"
|
|
|
+msgstr "Afficher une icône"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/04_Frontend/02_Design.md:1
|
|
|
+#, no-wrap
|
|
|
+msgid "Template file"
|
|
|
+msgstr "Fichier modèle"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/04_Frontend/02_Design.md:5
|
|
|
+#, no-wrap
|
|
|
+msgid "Writing a new theme"
|
|
|
+msgstr "Écrire un nouveau thème"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/04_Frontend/02_Design.md:9
|
|
|
+#, no-wrap
|
|
|
+msgid "Overriding icons"
|
|
|
+msgstr "Surcharger les icônes"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/05_Release_new_version.md:1
|
|
|
+#, no-wrap
|
|
|
+msgid "Preparing the release"
|
|
|
+msgstr "Préparer la sortie"
|
|
|
+
|
|
|
+#. 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 "
|
|
|
+"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**."
|
|
|
+msgstr ""
|
|
|
+"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**."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/05_Release_new_version.md:6
|
|
|
+msgid "It's also recommended to make the announcement on mailing@freshrss.org."
|
|
|
+msgstr "Il est aussi recommandé de faire l'annonce sur mailing@freshrss.org."
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/05_Release_new_version.md:7
|
|
|
+#, no-wrap
|
|
|
+msgid "Check the dev status"
|
|
|
+msgstr "S'assurer de l'état de dev"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/05_Release_new_version.md:10
|
|
|
+msgid ""
|
|
|
+"Before releasing a new version of FreshRSS, you must ensure that the code is "
|
|
|
+"stable and free of major bugs. Ideally, our tests should be automated and "
|
|
|
+"executed before any publication."
|
|
|
+msgstr ""
|
|
|
+"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 "
|
|
|
+"faudrait que nos tests soient automatisés et exécutés avant toute "
|
|
|
+"publication."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/05_Release_new_version.md:12
|
|
|
+msgid ""
|
|
|
+"You must also **make sure that the CHANGELOG file is up to date** in the dev "
|
|
|
+"branch with the updates of the version(s) to be released."
|
|
|
+msgstr ""
|
|
|
+"Il faut aussi **vous assurer que le fichier CHANGELOG est à jour** dans la "
|
|
|
+"branche de dev avec les mises à jour de la ou les version(s) à sortir."
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/05_Release_new_version.md:13
|
|
|
+#, no-wrap
|
|
|
+msgid "Git process"
|
|
|
+msgstr "Processus Git"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/05_Release_new_version.md:15
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"$ git checkout master\n"
|
|
|
+"$ git pull\n"
|
|
|
+"$ git merge --ff dev\n"
|
|
|
+"$ vim constants.php\n"
|
|
|
+"# Update version number x.y.y.z of FRESHRSS_VERSION\n"
|
|
|
+"$ git commit -a\n"
|
|
|
+"Version x.y.z\n"
|
|
|
+"$ git tag -a x.y.z\n"
|
|
|
+"Version x.y.z\n"
|
|
|
+"$ git push && git push --tags\n"
|
|
|
+msgstr ""
|
|
|
+"$ git checkout master\n"
|
|
|
+"$ git pull\n"
|
|
|
+"$ git merge --ff dev\n"
|
|
|
+"$ vim constants.php\n"
|
|
|
+"# Mettre à jour le numéro de version x.y.z de FRESHRSS_VERSION\n"
|
|
|
+"$ git commit -a\n"
|
|
|
+"Version x.y.z\n"
|
|
|
+"$ git tag -a x.y.z\n"
|
|
|
+"Version x.y.z\n"
|
|
|
+"$ git push && git push --tags\n"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/05_Release_new_version.md:28
|
|
|
+#, no-wrap
|
|
|
+msgid "Updating `update.freshrss.org`"
|
|
|
+msgstr "Mise à jour de update.freshrss.org"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/05_Release_new_version.md:31
|
|
|
+msgid ""
|
|
|
+"It's important to update update.freshrss.org since this is the default "
|
|
|
+"service for automatic FreshRSS updates."
|
|
|
+msgstr ""
|
|
|
+"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."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/05_Release_new_version.md:33
|
|
|
+msgid ""
|
|
|
+"The repository managing the code is located on GitHub: [FreshRSS/update."
|
|
|
+"freshrss.org] (https://github.com/FreshRSS/update.freshrss.org/)."
|
|
|
+msgstr ""
|
|
|
+"Le dépot gérant le code se trouve sur GitHub : [FreshRSS/update.freshrss.org]"
|
|
|
+"(https://github.com/FreshRSS/update.freshrss.org/)."
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./developers/05_Release_new_version.md:34
|
|
|
+#, no-wrap
|
|
|
+msgid "Writing the update script"
|
|
|
+msgstr "Écriture du script de mise à jour"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/05_Release_new_version.md:37
|
|
|
+msgid ""
|
|
|
+"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 dev 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."
|
|
|
+msgstr ""
|
|
|
+"Les scripts se trouvent dans le répertoire `./scripts/` et doivent être de "
|
|
|
+"la forme `update_to_x.y.z.php`. On trouve aussi dans ce répertoire "
|
|
|
+"`update_to_dev.php` destiné aux mises à jour de la branche de dev (ce 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."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/05_Release_new_version.md:39
|
|
|
+msgid ""
|
|
|
+"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`."
|
|
|
+msgstr ""
|
|
|
+"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 `https://codeload."
|
|
|
+"github.com/FreshRSS/FreshRSS/zip/x.y.z`."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/05_Release_new_version.md:41
|
|
|
+msgid "There are then 5 functions that have to be executed:"
|
|
|
+msgstr "Il existe ensuite 5 fonctions à remplir :"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/05_Release_new_version.md:47
|
|
|
+msgid ""
|
|
|
+"`apply_update()` takes care of saving the directory containing the data, "
|
|
|
+"checking its structure, downloading the FreshRSS package, deploying it and "
|
|
|
+"cleaning it all up. This function is pre-filled but adjustments can be made "
|
|
|
+"if necessary (e.g., reorganization of the `./data` structure). It returns "
|
|
|
+"`true` if no problem has occurred or a string indicating a problem;"
|
|
|
+msgstr ""
|
|
|
+"`apply_update()` qui se charge de sauvegarder le répertoire contenant les "
|
|
|
+"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 survenu "
|
|
|
+"ou une chaîne de caractères indiquant un soucis ;"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/05_Release_new_version.md:47
|
|
|
+msgid ""
|
|
|
+"`need_info_update()` returns `true` if the user must intervene during the "
|
|
|
+"update or `false` if not;"
|
|
|
+msgstr ""
|
|
|
+"`need_info_update()` retourne `true` si l'utilisateur doit intervenir durant "
|
|
|
+"la mise à jour ou `false` sinon ;"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/05_Release_new_version.md:47
|
|
|
+msgid ""
|
|
|
+"`ask_info_update()` displays a form to the user if `need_info_update()` has "
|
|
|
+"returned `true`;"
|
|
|
+msgstr ""
|
|
|
+"`ask_info_update()` affiche un formulaire à l'utilisateur si "
|
|
|
+"`need_info_update()` a retourné `true` ;"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/05_Release_new_version.md:47
|
|
|
+msgid ""
|
|
|
+"`save_info_update()` is responsible for saving the information filled out by "
|
|
|
+"the user (from the `ask_info_update()` form);"
|
|
|
+msgstr ""
|
|
|
+"`save_info_update()` est chargée de sauvegarder les informations renseignées "
|
|
|
+"par l'utilisateur (issues du formulaire de `ask_info_update()`) ;"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/05_Release_new_version.md:47
|
|
|
+msgid ""
|
|
|
+"`do_post_update()` is executed at the end of the update and takes into "
|
|
|
+"account the code of the new version (e.g., if the new version changes the "
|
|
|
+"`Minz_Configuration` object, you will benefit from these improvements)."
|
|
|
+msgstr ""
|
|
|
+"`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)."
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./developers/05_Release_new_version.md:48
|
|
|
+#, no-wrap
|
|
|
+msgid "Updating the versions file"
|
|
|
+msgstr "Mise à jour du fichier de versions"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/05_Release_new_version.md:51
|
|
|
+msgid ""
|
|
|
+"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 ""
|
|
|
+"Lorsque le script a été écrit et versionné, il est nécessaire de mettre à "
|
|
|
+"jour le fichier `./versions.php` qui contient une table de correspondances "
|
|
|
+"indiquant quelles versions sont mises à jour vers quelles autres versions."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/05_Release_new_version.md:53
|
|
|
+msgid "Here's an example of a `versions.php` file:"
|
|
|
+msgstr "Voici un exemple de fichier `versions.php` :"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/05_Release_new_version.md:54
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"<?php\n"
|
|
|
+"return array(\n"
|
|
|
+"\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// DEV\n"
|
|
|
+"\t'1.1.2-dev' => 'dev',\n"
|
|
|
+"\t'1.1.3-dev' => 'dev',\n"
|
|
|
+"\t'1.1.4-dev' => 'dev',\n"
|
|
|
+");\n"
|
|
|
+msgstr ""
|
|
|
+"<?php\n"
|
|
|
+"return array(\n"
|
|
|
+"\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// DEV\n"
|
|
|
+"\t'1.1.2-dev' => 'dev',\n"
|
|
|
+"\t'1.1.3-dev' => 'dev',\n"
|
|
|
+"\t'1.1.4-dev' => 'dev',\n"
|
|
|
+");\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/05_Release_new_version.md:69
|
|
|
+msgid "And here's how this table works:"
|
|
|
+msgstr "Et voici comment fonctionne cette table :"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/05_Release_new_version.md:75
|
|
|
+msgid "on the left you can find the N version, on the right the N+1 version;"
|
|
|
+msgstr "à gauche se trouve la version N, à droite la version N+1 ;"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/05_Release_new_version.md:75
|
|
|
+msgid "the `x.y.z.z-dev` versions are **all** updated to `dev`;"
|
|
|
+msgstr "les versions `x.y.z-dev` sont **toutes** mises à jour vers `dev` ;"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/05_Release_new_version.md:75
|
|
|
+msgid "stable versions are updated to stable versions;"
|
|
|
+msgstr "les versions stables sont mises à jour vers des versions stables ;"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/05_Release_new_version.md:75
|
|
|
+msgid ""
|
|
|
+"it's possible to skip several versions at once, provided that the update "
|
|
|
+"scripts support it;"
|
|
|
+msgstr ""
|
|
|
+"il est possible de sauter plusieurs versions d'un coup à condition que les "
|
|
|
+"scripts de mise à jour le prennent en charge ;"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/05_Release_new_version.md:75
|
|
|
+msgid ""
|
|
|
+"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."
|
|
|
+msgstr ""
|
|
|
+"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."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/05_Release_new_version.md:77
|
|
|
+msgid ""
|
|
|
+"It's **very strongly** recommended to keep this file organized according to "
|
|
|
+"version numbers by separating stable and dev versions."
|
|
|
+msgstr ""
|
|
|
+"Il est **très fortement** indiqué de garder ce fichier rangé selon les "
|
|
|
+"numéros de versions en séparant les versions stables et de dev."
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./developers/05_Release_new_version.md:78
|
|
|
+#, no-wrap
|
|
|
+msgid "Deployment"
|
|
|
+msgstr "Déploiement"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/05_Release_new_version.md:81
|
|
|
+msgid ""
|
|
|
+"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."
|
|
|
+msgstr ""
|
|
|
+"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 "
|
|
|
+"votre instance FreshRSS. Lancez la mise à jour et vérifiez que celle-ci se "
|
|
|
+"déroule correctement."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/05_Release_new_version.md:83
|
|
|
+msgid ""
|
|
|
+"When you're satisfied, update update.freshrss.org with the new script, test "
|
|
|
+"it again, and then move on."
|
|
|
+msgstr ""
|
|
|
+"Lorsque vous serez satisfait, mettez à jour update.freshrss.org avec le "
|
|
|
+"nouveau script et en testant de nouveau puis passez à la suite."
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/05_Release_new_version.md:84
|
|
|
+#, no-wrap
|
|
|
+msgid "Updating the FreshRSS services"
|
|
|
+msgstr "Mise à jour des services FreshRSS"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/05_Release_new_version.md:87
|
|
|
+msgid "Two services need to be updated immediately after the update."
|
|
|
+msgstr ""
|
|
|
+"Deux services sont à mettre à jour immédiatement après la mise à jour de "
|
|
|
+"update.freshrss.org :"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/05_Release_new_version.md:90
|
|
|
+msgid "rss.freshrss.org;"
|
|
|
+msgstr "rss.freshrss.org ;"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/05_Release_new_version.md:90
|
|
|
+msgid "demo.freshrss.org (public login: `demo` / `demodemo`)."
|
|
|
+msgstr "demo.freshrss.org (identifiants publics : `demo` / `demodemo`)."
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/05_Release_new_version.md:91
|
|
|
+#, no-wrap
|
|
|
+msgid "Publicly announce the release"
|
|
|
+msgstr "Annoncer publiquement la sortie"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/05_Release_new_version.md:94
|
|
|
+msgid ""
|
|
|
+"When everything's working, it's time to announce the release to the world!"
|
|
|
+msgstr ""
|
|
|
+"Lorsque tout fonctionne, il est temps d'annoncer la sortie au monde entier !"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/05_Release_new_version.md:99
|
|
|
+msgid ""
|
|
|
+"on GitHub by creating[a new release](https://github.com/FreshRSS/FreshRSS/"
|
|
|
+"releases/new)"
|
|
|
+msgstr ""
|
|
|
+"sur GitHub en créant [une nouvelle release](https://github.com/FreshRSS/"
|
|
|
+"FreshRSS/releases/new) ;"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/05_Release_new_version.md:99
|
|
|
+msgid ""
|
|
|
+"on the freshrss.org blog, at least for stable versions (write the article "
|
|
|
+"on[FreshRSS/freshrss.org](https://github.com/FreshRSS/freshrss.org))"
|
|
|
+msgstr ""
|
|
|
+"sur le blog de freshrss.org au minimum pour les versions stables (écrire "
|
|
|
+"l'article sur [FreshRSS/freshrss.org](https://github.com/FreshRSS/freshrss."
|
|
|
+"org))."
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/05_Release_new_version.md:99
|
|
|
+msgid "on Twitter ([@FreshRSS](https://twitter.com/FreshRSS) account)"
|
|
|
+msgstr "sur Twitter (compte [@FreshRSS](https://twitter.com/FreshRSS)) ;"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./developers/05_Release_new_version.md:99
|
|
|
+msgid "and on mailing@freshrss.org"
|
|
|
+msgstr "et sur mailing@freshrss.org ;"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./developers/05_Release_new_version.md:100
|
|
|
+#, no-wrap
|
|
|
+msgid "Starting the next development version"
|
|
|
+msgstr "Lancer la prochaine version de développement"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/05_Release_new_version.md:102
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"$ git checkout dev\n"
|
|
|
+"$ vim constants.php\n"
|
|
|
+"# Update the FRESHRSS_VERSION\n"
|
|
|
+"$ vim CHANGELOG.md\n"
|
|
|
+"# Prepare the changelog for the next version\n"
|
|
|
+"$ git add CHANGELOG.md && git commit && git push\n"
|
|
|
+msgstr ""
|
|
|
+"$ git checkout dev\n"
|
|
|
+"$ vim constants.php\n"
|
|
|
+"# Mettre à jour le numéro de version de FRESHRSS_VERSION\n"
|
|
|
+"$ vim CHANGELOG.md\n"
|
|
|
+"# Préparer la section pour la prochaine version\n"
|
|
|
+"$ git add CHANGELOG.md && git commit && git push\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./developers/05_Release_new_version.md:111
|
|
|
+msgid ""
|
|
|
+"Also remember to update update.freshrss.org so that it takes the current "
|
|
|
+"development version into account."
|
|
|
+msgstr ""
|
|
|
+"Pensez aussi à mettre à jour update.freshrss.org pour qu'il prenne en compte "
|
|
|
+"la version de développement actuelle."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./index.md:2
|
|
|
+msgid ""
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./index.md:4
|
|
|
+msgid ""
|
|
|
+"FreshRSS is an RSS aggregator and reader. It allows you to read and follow "
|
|
|
+"several news websites at a glance without the need to browse from one "
|
|
|
+"website to another."
|
|
|
+msgstr ""
|
|
|
+"FreshRSS est un agrégateur et lecteur de flux RSS. Il permet de regrouper "
|
|
|
+"l’actualité de plusieurs sites différents dans un endroit unique pour que "
|
|
|
+"vous puissiez la lire sans devoir aller de site en site."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./index.md:6
|
|
|
+msgid "FreshRSS has a lot of features including:"
|
|
|
+msgstr ""
|
|
|
+"FreshRSS a été conçu comme un agrégateur puissant et propose des tas de "
|
|
|
+"fonctionnalités :"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./index.md:18
|
|
|
+msgid "RSS and Atom aggregation"
|
|
|
+msgstr "Agrégation des flux RSS et Atom."
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./index.md:18
|
|
|
+msgid ""
|
|
|
+"Mark article as favorite if you liked it or if you want to read it later"
|
|
|
+msgstr ""
|
|
|
+"Utilisez les favoris pour marquer les articles qui vous ont plu ou que vous "
|
|
|
+"souhaitez lire plus tard."
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./index.md:18
|
|
|
+msgid "Filter and search functionality helps to easily find articles"
|
|
|
+msgstr ""
|
|
|
+"Le système de filtrage et de recherche permettent de cibler exactement les "
|
|
|
+"articles que vous souhaitez lire."
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./index.md:18
|
|
|
+msgid ""
|
|
|
+"Statistics to show you the publishing frequency all the websites you follow"
|
|
|
+msgstr ""
|
|
|
+"Les statistiques permettent de savoir en un coup d’œil quels sont les sites "
|
|
|
+"qui publient le plus, ou à l’inverse, le moins."
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./index.md:18
|
|
|
+msgid "Import/export of your feeds into OPML format"
|
|
|
+msgstr "Importation / exportation des flux au format OPML."
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./index.md:18
|
|
|
+msgid "Several themes created by the community"
|
|
|
+msgstr "Multi-thèmes pour changer l’habillage de FreshRSS."
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./index.md:18
|
|
|
+msgid "\"Google Reader\"-like API to connect Android applications"
|
|
|
+msgstr "API Google Reader pour pouvoir y brancher des applications Android."
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./index.md:18
|
|
|
+msgid ""
|
|
|
+"The application is \"responsive,\" which means it adapts to small screens so "
|
|
|
+"you can bring articles in your pocket"
|
|
|
+msgstr ""
|
|
|
+"« *Responsive design* » : l’application s’adapte aux petits écrans pour "
|
|
|
+"emporter FreshRSS dans votre poche."
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./index.md:18
|
|
|
+msgid ""
|
|
|
+"Self-hosted: the code is free (under AGPL3 licence), so you can host your "
|
|
|
+"own instance of FreshRSS"
|
|
|
+msgstr ""
|
|
|
+"Auto-hébergeable : le code source est libre (AGPL3) et vous pouvez donc "
|
|
|
+"l’héberger sur votre propre serveur."
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./index.md:18
|
|
|
+msgid "Multi-user, so you can also host for your friends and family"
|
|
|
+msgstr ""
|
|
|
+"Multi-utilisateurs pour héberger plusieurs personnes sur une même "
|
|
|
+"installation."
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./index.md:18
|
|
|
+msgid "And a lot more!"
|
|
|
+msgstr "Et bien d’autres !"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./index.md:20
|
|
|
+msgid "This documentation is split into different sections:"
|
|
|
+msgstr "Cette documentation est divisée en plusieurs parties :"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./index.md:24
|
|
|
+msgid ""
|
|
|
+"[User documentation](./users/02_First_steps.html), where you can discover "
|
|
|
+"all the possibilities offered by FreshRSS"
|
|
|
+msgstr ""
|
|
|
+"La [documentation utilisateurs](./users/02_First_steps.md) pour découvrir "
|
|
|
+"les fonctionnalités de FreshRSS."
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./index.md:24
|
|
|
+msgid ""
|
|
|
+"[Administrator documentation](./admins/01_Index.html) for detailed "
|
|
|
+"installation and maintenance related tasks"
|
|
|
+msgstr ""
|
|
|
+"La [documentation administrateurs](../en/admins/01_Installation.md) (en "
|
|
|
+"anglais) pour l’installation et la maintenance de FreshRSS."
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./index.md:24
|
|
|
+msgid ""
|
|
|
+"[Developer documentation](./developers/01_First_steps.html) to guide you in "
|
|
|
+"the source code of FreshRSS and to help you if you want to contribute"
|
|
|
+msgstr ""
|
|
|
+"La [documentation développeurs](./developers/01_First_steps.md) pour savoir "
|
|
|
+"comment contribuer et mieux comprendre le code source de FreshRSS."
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./index.md:24
|
|
|
+msgid ""
|
|
|
+"[Contributor guidelines](./contributing.md) for those who want to help "
|
|
|
+"improve FreshRSS"
|
|
|
+msgstr ""
|
|
|
+"Le [guide de contribution](./contributing.md) pour nous aider à développer "
|
|
|
+"FreshRSS."
|
|
|
+
|
|
|
+#. 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 "
|
|
|
+"make FreshRSS as intuitive as possible, but you might still need a little "
|
|
|
+"help to master the program."
|
|
|
+msgstr ""
|
|
|
+"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."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/02_First_steps.md:4
|
|
|
+msgid ""
|
|
|
+"This section will guide you to the pages you need to get started. The order "
|
|
|
+"is tailored to newcomers."
|
|
|
+msgstr ""
|
|
|
+"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."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/02_First_steps.md:6
|
|
|
+msgid ""
|
|
|
+"[After installing the application](../admins/03_Installation.md), the first "
|
|
|
+"step is to add some feeds. You have a few options:"
|
|
|
+msgstr ""
|
|
|
+"[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 :"
|
|
|
+
|
|
|
+#. type: Bullet: '1. '
|
|
|
+#: en/./users/02_First_steps.md:10
|
|
|
+msgid "[Add a feed manually](04_Subscriptions.md#adding-a-feed)"
|
|
|
+msgstr "[Ajouter un flux manuellement](04_Subscriptions.md#ajouter-un-flux)"
|
|
|
+
|
|
|
+#. type: Bullet: '2. '
|
|
|
+#: en/./users/02_First_steps.md:10
|
|
|
+msgid "[Import an OPML or JSON file](04_Subscriptions.md#import-and-export)"
|
|
|
+msgstr ""
|
|
|
+"[Importer un fichier OPML ou JSON](04_Subscriptions.md#import-et-export)"
|
|
|
+
|
|
|
+#. type: Bullet: '3. '
|
|
|
+#: en/./users/02_First_steps.md:10
|
|
|
+msgid "[Use the bookmarklet](04_Subscriptions.md#use-bookmarklet)"
|
|
|
+msgstr "[Utiliser le bookmark dédié](04_Subscriptions.md#utiliser-le-bookmark)"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/02_First_steps.md:12
|
|
|
+msgid ""
|
|
|
+"Once you have added your feeds to FreshRSS, it is time to read them. There "
|
|
|
+"are three availalbe reading modes:"
|
|
|
+msgstr ""
|
|
|
+"Une fois que vous avez ajouté vos flux à FreshRSS, il est temps de les lire. "
|
|
|
+"Pour cela, trois modes de lecture s'offrent à vous :"
|
|
|
+
|
|
|
+#. type: Bullet: '1. '
|
|
|
+#: en/./users/02_First_steps.md:16
|
|
|
+msgid ""
|
|
|
+"[The normal view](03_Main_view.md#normal-view) enables you to quickly read "
|
|
|
+"new articles"
|
|
|
+msgstr ""
|
|
|
+"[La vue normale](03_Main_view.md#la-vue-normale) qui permet de voir et de "
|
|
|
+"lire rapidement les nouveaux articles"
|
|
|
+
|
|
|
+#. type: Bullet: '2. '
|
|
|
+#: en/./users/02_First_steps.md:16
|
|
|
+msgid ""
|
|
|
+"[The global view](03_Main_view.md#global-view) shows you an overview of the "
|
|
|
+"status of your feeds in one glance"
|
|
|
+msgstr ""
|
|
|
+"[La vue globale](03_Main_view.md#la-vue-globale) est destinée à vous offrir "
|
|
|
+"un panorama de l'état de vos flux"
|
|
|
+
|
|
|
+#. type: Bullet: '3. '
|
|
|
+#: en/./users/02_First_steps.md:16
|
|
|
+msgid ""
|
|
|
+"[The reader view](03_Main_view.md#reader-view) offers you a comfortable "
|
|
|
+"reading experience"
|
|
|
+msgstr ""
|
|
|
+"[La vue lecture](03_Main_view.md#la-vue-lecture) est pensée pour vous offrir "
|
|
|
+"un meilleur confort de lecture"
|
|
|
+
|
|
|
+#. 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 "
|
|
|
+"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:"
|
|
|
+msgstr ""
|
|
|
+"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 "
|
|
|
+"le plus. Voici tout de même quelques pistes pour améliorer votre quotidien "
|
|
|
+"sur FreshRSS :"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/02_First_steps.md:27
|
|
|
+msgid ""
|
|
|
+"[Organize your feeds in categories](04_Subscriptions.md#feed-management)"
|
|
|
+msgstr ""
|
|
|
+"[Rangez vos flux dans des catégories](04_Subscriptions."
|
|
|
+"md#organisation_des_flux)"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/02_First_steps.md:27
|
|
|
+msgid "[Change the home page](05_Configuration.md#changing-the-view)"
|
|
|
+msgstr ""
|
|
|
+"[Configurez votre page d'accueil](05_Configuration.md#personnaliser-la-vue)"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/02_First_steps.md:27
|
|
|
+msgid "[Choose the reading options](05_Configuration.md#reading-options)"
|
|
|
+msgstr ""
|
|
|
+"[Configurez vos options de lecture](05_Configuration.md#options-de-lecture)"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/02_First_steps.md:27
|
|
|
+msgid "[Refresh feeds](03_Main_view.md#refreshing-feeds)"
|
|
|
+msgstr "[Mettez à jour vos flux](03_Main_view.md#rafraichir-les-flux)"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/02_First_steps.md:27
|
|
|
+msgid ""
|
|
|
+"[Filter articles](03_Main_view.md#filtering-articles) for a fast access to a "
|
|
|
+"selection"
|
|
|
+msgstr ""
|
|
|
+"[Filtrez les articles](03_Main_view.md#filtrer-les-articles) pour accéder "
|
|
|
+"rapidement à ceux que vous voulez lire en priorité"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/02_First_steps.md:27
|
|
|
+msgid ""
|
|
|
+"[Search an article](03_Main_view.md#searching-articles) published some time "
|
|
|
+"ago"
|
|
|
+msgstr ""
|
|
|
+"[Retrouvez un article](03_Main_view.md#rechercher-des-articles) qui a été "
|
|
|
+"publié il y a quelques jours ou mois"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/02_First_steps.md:27
|
|
|
+msgid "[Access your feeds on a mobile device](06_Mobile_access.md)"
|
|
|
+msgstr "[Accédez à vos flux même sur mobile](06_Mobile_access.md)"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/02_First_steps.md:27
|
|
|
+msgid "[Add some extensions](https://github.com/FreshRSS/Extensions)"
|
|
|
+msgstr "[Ajoutez quelques extensions](https://github.com/FreshRSS/Extensions)"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/02_First_steps.md:27
|
|
|
+msgid "[Frequently asked questions](07_Frequently_Asked_Questions.md)"
|
|
|
+msgstr "[Foire aux questions](07_Frequently_Asked_Questions.md)"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./users/03_Main_view.md:1
|
|
|
+#, no-wrap
|
|
|
+msgid "Normal view"
|
|
|
+msgstr "La vue normale"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./users/03_Main_view.md:5
|
|
|
+#, no-wrap
|
|
|
+msgid "Global view"
|
|
|
+msgstr "La vue globale"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./users/03_Main_view.md:9
|
|
|
+#, no-wrap
|
|
|
+msgid "Reader view"
|
|
|
+msgstr "La vue lecture"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./users/03_Main_view.md:13
|
|
|
+#, no-wrap
|
|
|
+msgid "Refreshing feeds"
|
|
|
+msgstr "Rafraîchir les flux"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:16
|
|
|
+msgid ""
|
|
|
+"To take full advantage of FreshRSS, it needs to retrieve new items from the "
|
|
|
+"feeds you have subscribed to. There are several ways to do this."
|
|
|
+msgstr ""
|
|
|
+"Pour profiter pleinement de FreshRSS, il faut qu’il récupère les nouveaux "
|
|
|
+"articles disponibles des flux auxquels vous avez souscrit. Pour cela, il "
|
|
|
+"existe plusieurs méthodes."
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./users/03_Main_view.md:17
|
|
|
+#, no-wrap
|
|
|
+msgid "Automatic update"
|
|
|
+msgstr "Mise à jour automatique"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:20
|
|
|
+msgid ""
|
|
|
+"This is the recommended method since you can forget about it once it is "
|
|
|
+"configured."
|
|
|
+msgstr ""
|
|
|
+"C’est la méthode recommandée car il n’y a pas besoin d’y penser, elle se "
|
|
|
+"fait toute seule, à la fréquence que vous avez choisi."
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./users/03_Main_view.md:21
|
|
|
+#, no-wrap
|
|
|
+msgid "With the actualize_script.php script"
|
|
|
+msgstr "Par le script actualize_script.php"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:24
|
|
|
+msgid ""
|
|
|
+"This method is only available if you have access to the scheduled tasks of "
|
|
|
+"the machine on which your FreshRSS instance is installed."
|
|
|
+msgstr ""
|
|
|
+"Cette méthode n’est possible que si vous avez accès aux tâches planifiées de "
|
|
|
+"la machine sur laquelle est installée votre instance de FreshRSS."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:26
|
|
|
+msgid ""
|
|
|
+"The script is named *actualize_script.php* and is located in the *app* "
|
|
|
+"folder. The scheduled task syntax will not be explained here. However, here "
|
|
|
+"is [a quick introduction to crontab](http://www.adminschoice.com/crontab-"
|
|
|
+"quick-reference/) that might help you."
|
|
|
+msgstr ""
|
|
|
+"Le script qui permet de mettre à jour les articles s’appelle "
|
|
|
+"*actualize_script.php* et se trouve dans le répertoire *app* de votre "
|
|
|
+"instance de FreshRSS. La syntaxe des tâches planifiées ne sera pas expliqué "
|
|
|
+"ici, cependant voici [une introduction rapide à crontab](http://www."
|
|
|
+"adminschoice.com/crontab-quick-reference/) qui peut vous aider."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:28
|
|
|
+msgid "Here is an example to trigger article update every hour."
|
|
|
+msgstr ""
|
|
|
+"Ci-dessous vous trouverez un exemple permettant la mise à jour des articles "
|
|
|
+"toutes les heures."
|
|
|
+
|
|
|
+#. type: Code fence info string
|
|
|
+#: en/./users/03_Main_view.md:29 en/./users/03_Main_view.md:61
|
|
|
+#: en/./users/03_Main_view.md:79 en/./users/03_Main_view.md:85
|
|
|
+#: en/./users/03_Main_view.md:93
|
|
|
+#, no-wrap
|
|
|
+msgid "cron"
|
|
|
+msgstr "cron"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:29
|
|
|
+#, no-wrap
|
|
|
+msgid "0 * * * * php /path/to/FreshRSS/app/actualize_script.php > /tmp/FreshRSS.log 2>&1\n"
|
|
|
+msgstr "0 * * * * php /chemin/vers/FreshRSS/app/actualize_script.php > /tmp/FreshRSS.log 2>&1\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:34
|
|
|
+msgid ""
|
|
|
+"Special parameters to configure the script - all parameters can be combined:"
|
|
|
+msgstr ""
|
|
|
+"« Paramètres de configuration du script; Ils sont utilisables "
|
|
|
+"simultanément : »"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:38
|
|
|
+msgid ""
|
|
|
+"- Parameter \"force\" https://freshrss.example.net/i/?"
|
|
|
+"c=feed&a=actualize&force=1 If *force* is set to 1 all feeds will be "
|
|
|
+"refreshed at once."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:42
|
|
|
+msgid ""
|
|
|
+"- Parameter \"ajax\" https://freshrss.example.net/i/?"
|
|
|
+"c=feed&a=actualize&ajax=1 Only a status site is returned and not a complete "
|
|
|
+"website. Example: \"OK\""
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:46
|
|
|
+msgid ""
|
|
|
+"- Parameter \"maxFeeds\" https://freshrss.example.net/i/?"
|
|
|
+"c=feed&a=actualize&maxFeeds=30 If *maxFeeds* is set the configured amount of "
|
|
|
+"feeds is refreshed at once. The default setting is \"10\"."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:50
|
|
|
+msgid ""
|
|
|
+"- Parameter \"token\" https://freshrss.example.net/i/?"
|
|
|
+"c=feed&a=actualize&token=542345872345734 Security parameter to prevent "
|
|
|
+"unauthorized refreshes. For detailed Documentation see \"Form authentication"
|
|
|
+"\"."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./users/03_Main_view.md:51
|
|
|
+#, no-wrap
|
|
|
+msgid "Online cron"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:54
|
|
|
+msgid ""
|
|
|
+"If you do not have access to the installation server scheduled task, you can "
|
|
|
+"still automate the update process."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:56
|
|
|
+msgid ""
|
|
|
+"To do so, you need to create a scheduled task, which need to call a specific "
|
|
|
+"URL: https://freshrss.example.net/i/?c=feed&a=actualize (it could be "
|
|
|
+"different depending on your installation). Depending on your application "
|
|
|
+"authentication method, you need to adapt the scheduled task."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Title ####
|
|
|
+#: en/./users/03_Main_view.md:57
|
|
|
+#, no-wrap
|
|
|
+msgid "No authentication"
|
|
|
+msgstr "Aucune authentification"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:60
|
|
|
+msgid ""
|
|
|
+"This is the most straightforward since you have a public instance; there is "
|
|
|
+"nothing special to configure:"
|
|
|
+msgstr ""
|
|
|
+"C’est le cas le plus simple, puisque votre instance est publique, vous "
|
|
|
+"n’avez rien de particulier à préciser :"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:61
|
|
|
+#, no-wrap
|
|
|
+msgid "0 * * * * curl 'https://freshrss.example.net/i/?c=feed&a=actualize'\n"
|
|
|
+msgstr "0 * * * * curl 'https://freshrss.example.net/i/?c=feed&a=actualize'\n"
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./users/03_Main_view.md:65
|
|
|
+#, no-wrap
|
|
|
+msgid "Form authentication"
|
|
|
+msgstr "Authentification par formulaire"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:68
|
|
|
+msgid ""
|
|
|
+"If you configure the application to allow anonymous reading, you can also "
|
|
|
+"allow anonymous users to update feeds (“Allow anonymous refresh of the "
|
|
|
+"articles”)."
|
|
|
+msgstr ""
|
|
|
+"Dans ces cas-là, si vous avez autorisé la lecture anonyme des articles, vous "
|
|
|
+"pouvez aussi permettre à n’importe qui de rafraîchir vos flux (« Autoriser "
|
|
|
+"le rafraîchissement anonyme des flux »)."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:70
|
|
|
+msgid ""
|
|
|
+msgstr ""
|
|
|
+""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:72
|
|
|
+msgid ""
|
|
|
+"The URL used in the previous section will now become accessible to anyone. "
|
|
|
+"Therefore you can use the same syntax for the scheduled task."
|
|
|
+msgstr ""
|
|
|
+"L’url précédente devient donc accessible à n’importe qui et vous pouvez "
|
|
|
+"utiliser la tâche cron de la partie précédente."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:74
|
|
|
+msgid ""
|
|
|
+"You can also configure an authentication token to grant special access on "
|
|
|
+"the server."
|
|
|
+msgstr ""
|
|
|
+"Vous pouvez aussi configurer un jeton d’authentification pour accorder un "
|
|
|
+"droit spécial sur votre serveur."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:76
|
|
|
+msgid ""
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:78
|
|
|
+msgid "The scheduled task syntax should look as follows:"
|
|
|
+msgstr "La tâche cron à utiliser sera de la forme suivante :"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:79
|
|
|
+#, no-wrap
|
|
|
+msgid "0 * * * * curl 'https://freshrss.example.net/i/?c=feed&a=actualize&token=my-token'\n"
|
|
|
+msgstr "0 * * * * curl 'https://freshrss.example.net/i/?c=feed&a=actualize&token=mon-token'\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:84
|
|
|
+msgid ""
|
|
|
+"You can also target a different user by adding their username to the query "
|
|
|
+"string, with `&user=insert-username`:"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:85
|
|
|
+#, no-wrap
|
|
|
+msgid "0 * * * * curl 'https://freshrss.example.net/i/?c=feed&a=actualize&user=someone&token=my-token'\n"
|
|
|
+msgstr "0 * * * * curl 'https://freshrss.exemple.net/i/?c=feed&a=actualize&user=quelquun&token=mon-token'\n"
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./users/03_Main_view.md:89
|
|
|
+#, no-wrap
|
|
|
+msgid "HTTP authentication"
|
|
|
+msgstr "Authentification HTTP"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: 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 task. "
|
|
|
+"**Note that this method is highly discouraged since it means that your "
|
|
|
+"credentials will be in plain sight!**"
|
|
|
+msgstr ""
|
|
|
+"Dans ce cas-là, le token et les permissions “anonymes” sont inutilisables et "
|
|
|
+"il vous sera nécessaire d’indiquer vos identifiants dans la tâche cron. "
|
|
|
+"**Notez que cette solution est grandement déconseillée puisqu’elle implique "
|
|
|
+"que vos identifiants seront visibles en clair !**"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:93
|
|
|
+#, no-wrap
|
|
|
+msgid "0 * * * * curl -u alice:password123 'https://freshrss.example.net/i/?c=feed&a=actualize'\n"
|
|
|
+msgstr "0 * * * * curl -u alice:motdepasse123 'https://freshrss.exemple.net/i/?c=feed&a=actualize'\n"
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./users/03_Main_view.md:97
|
|
|
+#, no-wrap
|
|
|
+msgid "Manual update"
|
|
|
+msgstr "Mise à jour manuelle"
|
|
|
+
|
|
|
+#. 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 "
|
|
|
+"manually. There are two methods for updating all or some of the feeds."
|
|
|
+msgstr ""
|
|
|
+"Si vous ne pouvez pas ou ne voulez pas utiliser la méthode automatique, vous "
|
|
|
+"pouvez le faire de façon manuelle. Il existe deux méthodes qui permettent de "
|
|
|
+"mettre à jour tout ou partie des flux."
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./users/03_Main_view.md:101
|
|
|
+#, no-wrap
|
|
|
+msgid "Complete update"
|
|
|
+msgstr "Mise à jour complète"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:104
|
|
|
+msgid ""
|
|
|
+"This update occurs on all feeds. To trigger it, simply click on the update "
|
|
|
+"link in the navigation menu."
|
|
|
+msgstr ""
|
|
|
+"Cette mise à jour se fait pour l’ensemble des flux de l’instance. Pour "
|
|
|
+"initier cette mise à jour, il suffit de cliquer sur le lien de mise à jour "
|
|
|
+"disponible dans le menu de navigation."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:106
|
|
|
+msgid ""
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:108
|
|
|
+msgid ""
|
|
|
+"When the update starts, a progress bar appears and changes while feeds are "
|
|
|
+"processed."
|
|
|
+msgstr ""
|
|
|
+"Lorsque la mise à jour démarre, une barre de progression apparait et "
|
|
|
+"s’actualise au fur et à mesure de la récupération des articles."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:110
|
|
|
+msgid ""
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./users/03_Main_view.md:111
|
|
|
+#, no-wrap
|
|
|
+msgid "Partial update"
|
|
|
+msgstr "Mise à jour partielle"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:114
|
|
|
+msgid ""
|
|
|
+"This update occurs on the selected feed only. To trigger it, simply click on "
|
|
|
+"the update link in the feed menu."
|
|
|
+msgstr ""
|
|
|
+"Cette mise à jour se fait pour le flux sélectionné uniquement. Pour initier "
|
|
|
+"cette mise à jour, il suffit de cliquer sur le lien de mise à jour "
|
|
|
+"disponible dans le menu du flux."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:116
|
|
|
+msgid ""
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./users/03_Main_view.md:117
|
|
|
+#, no-wrap
|
|
|
+msgid "Filtering articles"
|
|
|
+msgstr "Filtrer les articles"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:120
|
|
|
+msgid ""
|
|
|
+"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."
|
|
|
+msgstr ""
|
|
|
+"Avec le nombre croissant d’articles stockés par FreshRSS, il devient "
|
|
|
+"important d’avoir des filtres efficaces pour n’afficher qu’une partie des "
|
|
|
+"articles. Il existe plusieurs méthodes qui filtrent selon des critères "
|
|
|
+"différents. Ces méthodes peuvent être combinées dans la plus part des cas."
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./users/03_Main_view.md:121
|
|
|
+#, no-wrap
|
|
|
+msgid "By category"
|
|
|
+msgstr "Par catégorie"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:124
|
|
|
+msgid ""
|
|
|
+"This is the easiest method. You only need to click on the category title in "
|
|
|
+"the side panel. There are two special categories at the top of the panel:"
|
|
|
+msgstr ""
|
|
|
+"C’est la méthode la plus simple. Il suffit de cliquer sur le titre d’une "
|
|
|
+"catégorie dans le panneau latéral. Il existe deux catégories spéciales qui "
|
|
|
+"sont placées en haut dudit panneau :"
|
|
|
+
|
|
|
+#. type: Bullet: ' * '
|
|
|
+#: en/./users/03_Main_view.md:127
|
|
|
+msgid ""
|
|
|
+"*Main feed* displays only articles from feeds marked as available in that "
|
|
|
+"category"
|
|
|
+msgstr ""
|
|
|
+"*Flux principal* qui affiche uniquement les articles des flux marqués comme "
|
|
|
+"visible dans cette catégorie"
|
|
|
+
|
|
|
+#. type: Bullet: ' * '
|
|
|
+#: en/./users/03_Main_view.md:127
|
|
|
+msgid "*Favourites* displays only articles marked as favourites"
|
|
|
+msgstr ""
|
|
|
+"*Favoris* qui affiche uniquement les articles, tous flux confondus, marqués "
|
|
|
+"comme favoris"
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./users/03_Main_view.md:128
|
|
|
+#, no-wrap
|
|
|
+msgid "By feed"
|
|
|
+msgstr "Par flux"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:131
|
|
|
+msgid "There are several methods to filter articles by feed:"
|
|
|
+msgstr "Il existe plusieurs méthodes pour filtrer les articles par flux :"
|
|
|
+
|
|
|
+#. type: Bullet: ' * '
|
|
|
+#: en/./users/03_Main_view.md:136
|
|
|
+msgid "by clicking the feed title in the side panel"
|
|
|
+msgstr "en cliquant sur le titre du flux dans le panneau latéral"
|
|
|
+
|
|
|
+#. type: Bullet: ' * '
|
|
|
+#: en/./users/03_Main_view.md:136
|
|
|
+msgid "by clicking the feed title in the article details"
|
|
|
+msgstr "en cliquant sur le titre du flux dans le détail de l’article"
|
|
|
+
|
|
|
+#. type: Bullet: ' * '
|
|
|
+#: en/./users/03_Main_view.md:136
|
|
|
+msgid "by filtering in the feed options from the side panel"
|
|
|
+msgstr "en filtrant dans les options du flux dans le panneau latéral"
|
|
|
+
|
|
|
+#. type: Bullet: ' * '
|
|
|
+#: en/./users/03_Main_view.md:136
|
|
|
+msgid "by filtering in the feed configuration"
|
|
|
+msgstr "en filtrant dans la configuration du flux"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:138
|
|
|
+msgid ""
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./users/03_Main_view.md:139
|
|
|
+#, no-wrap
|
|
|
+msgid "By status"
|
|
|
+msgstr "Par statut"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:142
|
|
|
+msgid ""
|
|
|
+"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."
|
|
|
+msgstr ""
|
|
|
+"Chaque article possède deux attributs qui peuvent être combinés. Le premier "
|
|
|
+"attribut indique si l’article a été lu ou non. Le second attribut indique si "
|
|
|
+"l’article a été noté comme favori ou non."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: 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."
|
|
|
+msgstr ""
|
|
|
+"Dans la version 0.7.x, les filtres sur les attributs sont accessibles depuis "
|
|
|
+"la liste déroulante qui gère l’affichage des articles. Dans cette version, "
|
|
|
+"il n’est pas possible de combiner les filtres. Par exemple, on ne peut pas "
|
|
|
+"afficher les articles lus qui ont été notés comme favori."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:146
|
|
|
+msgid ""
|
|
|
+msgstr ""
|
|
|
+""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:148
|
|
|
+msgid ""
|
|
|
+"Starting with version 0.8, all attribute filters are visible as toggle "
|
|
|
+"icons. They can be combined. As any combination is possible, some have the "
|
|
|
+"same result. For instance, the result for all filters selected is the same "
|
|
|
+"as no filter selected."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:150
|
|
|
+msgid ""
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:152
|
|
|
+msgid "By default, this filter displays only unread articles"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./users/03_Main_view.md:153
|
|
|
+#, no-wrap
|
|
|
+msgid "By content"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:156
|
|
|
+msgid ""
|
|
|
+"It is possible to filter articles by their content by inputting a string in "
|
|
|
+"the search field."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./users/03_Main_view.md:157
|
|
|
+#, no-wrap
|
|
|
+msgid "With the search field"
|
|
|
+msgstr "Grâce au champ de recherche"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:160
|
|
|
+msgid "You can use the search field to further refine results:"
|
|
|
+msgstr ""
|
|
|
+"Il est possible d’utiliser le champ de recherche pour raffiner les "
|
|
|
+"résultats :"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/03_Main_view.md:199
|
|
|
+msgid "by author: `author:name` or `author:'composed name'`"
|
|
|
+msgstr "par auteur : `author:nom` or `author:'nom composé'`"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/03_Main_view.md:199
|
|
|
+msgid "by title: `intitle:keyword` or `intitle:'composed keyword'`"
|
|
|
+msgstr "par titre : `intitle:mot` or `intitle:'mot composé'`"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/03_Main_view.md:199
|
|
|
+msgid "by URL: `inurl:keyword` or `inurl:'composed keyword'`"
|
|
|
+msgstr "par URL: `inurl:mot` or `inurl:'mot composé'`"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/03_Main_view.md:199
|
|
|
+msgid "by tag: `#tag`"
|
|
|
+msgstr "par tag: `#tag`"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/03_Main_view.md:199
|
|
|
+msgid "by free-text: `keyword` or `'composed keyword'`"
|
|
|
+msgstr "par texte libre : `mot` or `'mot composé'`"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:199
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"* by date of discovery, using the [ISO 8601 time interval format](http://en.wikipedia.org/wiki/ISO_8601#Time_intervals): `date:<date-interval>`\n"
|
|
|
+"\t* From a specific day, or month, or year:\n"
|
|
|
+"\t\t* `date:2014-03-30`\n"
|
|
|
+"\t\t* `date:2014-03` or `date:201403`\n"
|
|
|
+"\t\t* `date:2014`\n"
|
|
|
+"\t* From a specific time of a given day:\n"
|
|
|
+"\t\t* `date:2014-05-30T13`\n"
|
|
|
+"\t\t* `date:2014-05-30T13:30`\n"
|
|
|
+"\t* Between two given dates:\n"
|
|
|
+"\t\t* `date:2014-02/2014-04`\n"
|
|
|
+"\t\t* `date:2014-02--2014-04`\n"
|
|
|
+"\t\t* `date:2014-02/04`\n"
|
|
|
+"\t\t* `date:2014-02-03/05`\n"
|
|
|
+"\t\t* `date:2014-02-03T22:00/22:15`\n"
|
|
|
+"\t\t* `date:2014-02-03T22:00/15`\n"
|
|
|
+"\t* After a given date:\n"
|
|
|
+"\t\t* `date:2014-03/`\n"
|
|
|
+"\t* Before a given date:\n"
|
|
|
+"\t\t* `date:/2014-03`\n"
|
|
|
+"\t* For a specific duration after a given date:\n"
|
|
|
+"\t\t* `date:2014-03/P1W`\n"
|
|
|
+"\t* For a specific duration before a given date:\n"
|
|
|
+"\t\t* `date:P1W/2014-05-25T23:59:59`\n"
|
|
|
+"\t* For the past duration before now (the trailing slash is optional):\n"
|
|
|
+"\t\t* `date:P1Y/` or `date:P1Y` (past year)\n"
|
|
|
+"\t\t* `date:P2M/` (past two months)\n"
|
|
|
+"\t\t* `date:P3W/` (past three weeks)\n"
|
|
|
+"\t\t* `date:P4D/` (past four days)\n"
|
|
|
+"\t\t* `date:PT5H/` (past five hours)\n"
|
|
|
+"\t\t* `date:PT30M/` (past thirty minutes)\n"
|
|
|
+"\t\t* `date:PT90S/` (past ninety seconds)\n"
|
|
|
+"\t\t* `date:P1DT1H/` (past one day and one hour)\n"
|
|
|
+"* by date of publication, using the same format: `pubdate:<date-interval>`\n"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:201
|
|
|
+msgid ""
|
|
|
+"Be careful not to enter a space between the operator and the search value."
|
|
|
+msgstr ""
|
|
|
+"Attention à ne pas introduire d’espace entre l’opérateur et la valeur "
|
|
|
+"recherchée."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:204
|
|
|
+msgid ""
|
|
|
+"Some operators can be used negatively, to exclude articles, with the same "
|
|
|
+"syntax as above, but prefixed by a `!` or `-`: `-author:name`, `-intitle:"
|
|
|
+"keyword`, `-inurl:keyword`, `-#tag`, `!keyword`."
|
|
|
+msgstr ""
|
|
|
+"Certains opérateurs peuvent être utilisé négativement, pour exclure des "
|
|
|
+"articles, avec la même syntaxe que ci-dessus, mais préfixé par `!` ou `-` :`-"
|
|
|
+"author:nom`, `-intitle:mot`, `-inurl:mot`, `-#tag`, `!mot`."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:206
|
|
|
+msgid ""
|
|
|
+"It is also possible to combine keywords to create a more precise filter. For "
|
|
|
+"example, you can enter multiple instances of `author:`, `intitle:`, `inurl:"
|
|
|
+"`, `#`, and free-text."
|
|
|
+msgstr ""
|
|
|
+"Il est également possible de combiner les mots-clefs pour faire un filtrage "
|
|
|
+"encore plus précis, et il est autorisé d’avoir plusieurs instances de : "
|
|
|
+"`author:`, `intitle:`, `inurl:`, `#`, et texte libre."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/03_Main_view.md:208
|
|
|
+msgid ""
|
|
|
+"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`"
|
|
|
+msgstr ""
|
|
|
+"Combiner plusieurs critères implique un *et* logique, mais le mot clef ` OR "
|
|
|
+"` peut être utiliser pour combiner plusieurs critères avec un *ou* logique :"
|
|
|
+"`author:Dupont OR author:Dupond`"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./users/04_Subscriptions.md:1
|
|
|
+#, no-wrap
|
|
|
+msgid "Adding a feed"
|
|
|
+msgstr "Ajouter un flux"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./users/04_Subscriptions.md:5
|
|
|
+#, no-wrap
|
|
|
+msgid "Import and export"
|
|
|
+msgstr "Import et export"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./users/04_Subscriptions.md:9
|
|
|
+#, no-wrap
|
|
|
+msgid "Use bookmarklet"
|
|
|
+msgstr "Utiliser le « bookmarklet »"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/04_Subscriptions.md:12
|
|
|
+msgid ""
|
|
|
+"Bookmarklets are little scripts that you can execute to perform various "
|
|
|
+"tasks. FreshRSS offers a bookmarklet for subscribing to newsfeeds."
|
|
|
+msgstr ""
|
|
|
+"Les « bookmarklets » sont de petits scripts que vous pouvez exécuter pour "
|
|
|
+"effectuer des tâches diverses et variées. FreshRSS offre un signet "
|
|
|
+"( « bookmark » ) pour s'abonner aux fils de nouvelles."
|
|
|
+
|
|
|
+#. type: Bullet: ' 1. '
|
|
|
+#: en/./users/04_Subscriptions.md:16
|
|
|
+msgid "Open \"Subscriptions management\"."
|
|
|
+msgstr "Ouvrez \"Gestion des abonnements\"."
|
|
|
+
|
|
|
+#. type: Bullet: ' 2. '
|
|
|
+#: en/./users/04_Subscriptions.md:16
|
|
|
+msgid "Click on \"Subscription tools\"."
|
|
|
+msgstr "Cliquez sur \"Outils d'abonnement\"."
|
|
|
+
|
|
|
+#. type: Bullet: ' 3. '
|
|
|
+#: 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."
|
|
|
+msgstr ""
|
|
|
+"Glissez le bouton \"S'abonner\" dans la barre d'outils des signets ou "
|
|
|
+"cliquez droit et choisissez l'action \"Lien vers les signets\" de votre "
|
|
|
+"navigateur."
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./users/04_Subscriptions.md:17
|
|
|
+#, no-wrap
|
|
|
+msgid "Feed management"
|
|
|
+msgstr "Organisation des flux"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./users/05_Configuration.md:2
|
|
|
+#, no-wrap
|
|
|
+msgid "Display"
|
|
|
+msgstr "Personnaliser la vue"
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./users/05_Configuration.md:4
|
|
|
+#, no-wrap
|
|
|
+msgid "Language"
|
|
|
+msgstr "Langue"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:9
|
|
|
+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 "
|
|
|
+"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)."
|
|
|
+msgstr ""
|
|
|
+"À 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)."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:11
|
|
|
+msgid ""
|
|
|
+"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 ""
|
|
|
+"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."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:13
|
|
|
+msgid ""
|
|
|
+"Available languages are: cz, de, en, es, fr, he, it, kr, nl, oc, pt-br, ru, "
|
|
|
+"tr, zh-cn."
|
|
|
+msgstr ""
|
|
|
+"Les langues disponibles sont : cz, de, en, es, fr, he, it, kr, nl, oc, pt-"
|
|
|
+"br, ru, tr, zh-cn."
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./users/05_Configuration.md:14
|
|
|
+#, no-wrap
|
|
|
+msgid "Theme"
|
|
|
+msgstr "Thème"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:17
|
|
|
+msgid ""
|
|
|
+"There's no accounting for tastes, which is why FreshRSS offers eight "
|
|
|
+"official themes:"
|
|
|
+msgstr ""
|
|
|
+"Les goûts et les couleurs, ça ne se discute pas. C'est pourquoi FreshRSS "
|
|
|
+"propose huit thèmes officiels :"
|
|
|
+
|
|
|
+#. type: Bullet: ' * '
|
|
|
+#: en/./users/05_Configuration.md:26
|
|
|
+msgid "*Blue Lagoon* by **Mister aiR**"
|
|
|
+msgstr "*Blue Lagoon* par **Mister aiR**"
|
|
|
+
|
|
|
+#. type: Bullet: ' * '
|
|
|
+#: en/./users/05_Configuration.md:26
|
|
|
+msgid "*Dark* by **AD**"
|
|
|
+msgstr "*Dark* par **AD**"
|
|
|
+
|
|
|
+#. type: Bullet: ' * '
|
|
|
+#: en/./users/05_Configuration.md:26
|
|
|
+msgid "*Flat design* by **Marien Fressinaud**"
|
|
|
+msgstr "*Flat design* par **Marien Fressinaud**"
|
|
|
+
|
|
|
+#. type: Bullet: ' * '
|
|
|
+#: en/./users/05_Configuration.md:26
|
|
|
+msgid "*Origine* by **Marien Fressinaud**"
|
|
|
+msgstr "*Origine* par **Marien Fressinaud**"
|
|
|
+
|
|
|
+#. type: Bullet: ' * '
|
|
|
+#: en/./users/05_Configuration.md:26
|
|
|
+msgid "*Origine-compact* by **Kevin Papst**"
|
|
|
+msgstr "*Origine-compact* par **Kevin Papst**"
|
|
|
+
|
|
|
+#. type: Bullet: ' * '
|
|
|
+#: en/./users/05_Configuration.md:26
|
|
|
+msgid "*Pafat* by **Plopoyop**"
|
|
|
+msgstr "*Pafat* par **Plopoyop**"
|
|
|
+
|
|
|
+#. type: Bullet: ' * '
|
|
|
+#: en/./users/05_Configuration.md:26
|
|
|
+msgid "*Screwdriver* by **Mister aiR**"
|
|
|
+msgstr "*Screwdriver* par **Mister aiR**"
|
|
|
+
|
|
|
+#. type: Bullet: ' * '
|
|
|
+#: en/./users/05_Configuration.md:26
|
|
|
+msgid "*Swage* by **Patrick Crandol**"
|
|
|
+msgstr "*Swage* par **Patrick Crandol**"
|
|
|
+
|
|
|
+#. 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 "
|
|
|
+"own](../developers/04_Frontend/02_Design.md)."
|
|
|
+msgstr ""
|
|
|
+"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)."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:30
|
|
|
+msgid ""
|
|
|
+"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."
|
|
|
+msgstr ""
|
|
|
+"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."
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./users/05_Configuration.md:31
|
|
|
+#, no-wrap
|
|
|
+msgid "Content width"
|
|
|
+msgstr "Largeur du contenu"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: 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 "
|
|
|
+"possible to customize the width of the displayed content. There are four "
|
|
|
+"settings available:"
|
|
|
+msgstr ""
|
|
|
+"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 :"
|
|
|
+
|
|
|
+#. type: Bullet: ' * '
|
|
|
+#: en/./users/05_Configuration.md:39
|
|
|
+msgid "**Fine** displays content up to a maximum width of 550 pixels"
|
|
|
+msgstr "**Fine** qui affiche le contenu jusqu'à 550 pixels"
|
|
|
+
|
|
|
+#. type: Bullet: ' * '
|
|
|
+#: en/./users/05_Configuration.md:39
|
|
|
+msgid "**Medium** displays content up to a maximum width of 800 pixels"
|
|
|
+msgstr "**Moyenne** qui affiche le contenu jusqu'à 800 pixels"
|
|
|
+
|
|
|
+#. type: Bullet: ' * '
|
|
|
+#: en/./users/05_Configuration.md:39
|
|
|
+msgid "**Large** displays content up to a maximum width of 1000 pixels"
|
|
|
+msgstr "**Large** qui affiche le contenu jusqu'à 1000 pixels"
|
|
|
+
|
|
|
+#. type: Bullet: ' * '
|
|
|
+#: en/./users/05_Configuration.md:39
|
|
|
+msgid "**No limit** displays the content on 100% of the available space"
|
|
|
+msgstr ""
|
|
|
+"**Pas de limite** qui affiche le contenu sur 100% de la place disponible"
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./users/05_Configuration.md:40
|
|
|
+#, no-wrap
|
|
|
+msgid "Article icons"
|
|
|
+msgstr "Icônes d'article"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:43
|
|
|
+msgid "Please note that this section only affects normal view."
|
|
|
+msgstr "Veuillez noter que cette section n'affecte que la vue normale."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:45
|
|
|
+msgid ""
|
|
|
+""
|
|
|
+msgstr ""
|
|
|
+""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:48
|
|
|
+msgid ""
|
|
|
+"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."
|
|
|
+msgstr ""
|
|
|
+"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."
|
|
|
+
|
|
|
+#. 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 "
|
|
|
+"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 ""
|
|
|
+"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 "
|
|
|
+"sera vide."
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./users/05_Configuration.md:53
|
|
|
+#, no-wrap
|
|
|
+msgid "HTML5 notification timout"
|
|
|
+msgstr "Temps d'affichage de la notification HTML5"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:56
|
|
|
+msgid ""
|
|
|
+"After automatically updating the feeds, FreshRSS can pop up a notification "
|
|
|
+"using the HTML5 notification API."
|
|
|
+msgstr ""
|
|
|
+"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."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:58
|
|
|
+msgid ""
|
|
|
+"The duration of this notification can be set. By default, the value is 0."
|
|
|
+msgstr ""
|
|
|
+"Il est possible de régler la durée d'affichage de cette notification. Par "
|
|
|
+"défaut, la valeur est 0."
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./users/05_Configuration.md:59
|
|
|
+#, no-wrap
|
|
|
+msgid "Show the navigation button"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:62
|
|
|
+msgid ""
|
|
|
+"By default, FreshRSS displays buttons to ease the article navigation when "
|
|
|
+"browsing on mobile. The drawback is that they eat up some precious space."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:64
|
|
|
+msgid ""
|
|
|
+""
|
|
|
+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 "
|
|
|
+"you browse with gestures, you can disable them from the interface."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./users/05_Configuration.md:67
|
|
|
+#, no-wrap
|
|
|
+msgid "Reading"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./users/05_Configuration.md:71 en/./users/05_Configuration.md:154
|
|
|
+#, no-wrap
|
|
|
+msgid "Archival"
|
|
|
+msgstr "Archivage"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./users/05_Configuration.md:75
|
|
|
+#, no-wrap
|
|
|
+msgid "Sharing"
|
|
|
+msgstr "Partage"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:78
|
|
|
+msgid ""
|
|
|
+"To make your life easier, you can share articles straight from FreshRSS."
|
|
|
+msgstr ""
|
|
|
+"Pour vous faciliter la vie, vous pouvez partager des articles directement "
|
|
|
+"via FreshRSS."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:80
|
|
|
+msgid ""
|
|
|
+"At the moment, FreshRSS supports 18 sharing methods, ranging from self-"
|
|
|
+"hosted services (Shaarli, etc.) to proprietary services (Facebook, etc.)."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:83
|
|
|
+msgid ""
|
|
|
+"By default, the sharing list is empty. "
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:85
|
|
|
+msgid ""
|
|
|
+"To add a new item to the list, please follow the following simple steps:"
|
|
|
+msgstr ""
|
|
|
+"Pour ajouter un nouvel élément à la liste, veuillez suivre les étapes "
|
|
|
+"simples ci-dessous :"
|
|
|
+
|
|
|
+#. type: Bullet: ' 1. '
|
|
|
+#: en/./users/05_Configuration.md:90
|
|
|
+msgid "Select the desired sharing method in the drop-down list."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: ' 1. '
|
|
|
+#: en/./users/05_Configuration.md:90
|
|
|
+msgid "Press the ```✚``` button to add it to the list."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: ' 1. '
|
|
|
+#: en/./users/05_Configuration.md:90
|
|
|
+msgid ""
|
|
|
+"Configure the method in the list. All names can be modified in the display. "
|
|
|
+"Some methods need the sharing URL to be able to work properly (ex: Shaarli)."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: ' 1. '
|
|
|
+#: en/./users/05_Configuration.md:90 en/./users/05_Configuration.md:95
|
|
|
+msgid "Submit your changes."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:92
|
|
|
+msgid "To remove an item from the list, follow those simple steps:"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: ' 1. '
|
|
|
+#: en/./users/05_Configuration.md:95
|
|
|
+msgid "Press the ```❌``` button next to the share method you want to remove."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./users/05_Configuration.md:96
|
|
|
+#, no-wrap
|
|
|
+msgid "Shortcuts"
|
|
|
+msgstr "Raccourcis"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:100
|
|
|
+msgid ""
|
|
|
+"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."
|
|
|
+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 "
|
|
|
+"configuration to fit your needs."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:104
|
|
|
+msgid "There are 4 types of shortcuts:"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: ' 1. '
|
|
|
+#: en/./users/05_Configuration.md:109
|
|
|
+msgid "Views: they allow switching views with ease."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: ' 1. '
|
|
|
+#: en/./users/05_Configuration.md:109
|
|
|
+msgid ""
|
|
|
+"Navigation: they allow navigation through articles, feeds, and categories."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: ' 1. '
|
|
|
+#: en/./users/05_Configuration.md:109
|
|
|
+msgid ""
|
|
|
+"Article actions: they allow interactions with an article, like sharing or "
|
|
|
+"opening it on the original web-site."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: ' 1. '
|
|
|
+#: en/./users/05_Configuration.md:109
|
|
|
+msgid ""
|
|
|
+"Other actions: they allow other interactions with the application, like "
|
|
|
+"opening the user queries menu or accessing the documentation."
|
|
|
+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 "
|
|
|
+"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."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:114
|
|
|
+msgid "The same process applies to the user queries."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: 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 "
|
|
|
+"some unexpected behavior."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./users/05_Configuration.md:118
|
|
|
+#, no-wrap
|
|
|
+msgid "User queries"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:122
|
|
|
+msgid ""
|
|
|
+"You can configure your [user queries](./03_Main_view.md) in that section. "
|
|
|
+"There is not much to say here as it is pretty straightforward. You can only "
|
|
|
+"change user query titles or drop them."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:124
|
|
|
+msgid "At the moment, there is no helper to build a user query from here."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./users/05_Configuration.md:125
|
|
|
+#, no-wrap
|
|
|
+msgid "Users"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./users/05_Configuration.md:129
|
|
|
+#, no-wrap
|
|
|
+msgid "Authentication methods"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./users/05_Configuration.md:131
|
|
|
+#, no-wrap
|
|
|
+msgid "HTTP Authentication (Apache)"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: ' 1. '
|
|
|
+#: en/./users/05_Configuration.md:137
|
|
|
+msgid "User control is based on the `.htaccess` file."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: ' 2. '
|
|
|
+#: en/./users/05_Configuration.md:137
|
|
|
+msgid ""
|
|
|
+"It is best practice to place the `.htaccess` file in the `./i/` subdirectory "
|
|
|
+"so the API and other third party services can work."
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: ' 3. '
|
|
|
+#: en/./users/05_Configuration.md:137
|
|
|
+msgid ""
|
|
|
+"If you want to limit all access to registered users only, place the file in "
|
|
|
+"the FreshRSS directory itself or in a parent directory. Note that WebSub and "
|
|
|
+"API will not work!"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Bullet: ' 4. '
|
|
|
+#: en/./users/05_Configuration.md:137
|
|
|
+msgid "Example `.htaccess` file for a user \"marie\":"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:138
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"AuthUserFile /home/marie/repertoire/.htpasswd\n"
|
|
|
+"AuthGroupFile /dev/null\n"
|
|
|
+"AuthName \"Chez Marie\"\n"
|
|
|
+"AuthType Basic\n"
|
|
|
+"Require user marie\n"
|
|
|
+msgstr ""
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:147
|
|
|
+msgid ""
|
|
|
+"More information can be found in the [Apache documentation](http://httpd."
|
|
|
+"apache.org/docs/trunk/howto/auth.html#gettingitworking)."
|
|
|
+msgstr ""
|
|
|
+"Plus d'informations dans [la documentation d'Apache.](http://httpd.apache."
|
|
|
+"org/docs/trunk/howto/auth.html#gettingitworking)"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./users/05_Configuration.md:148
|
|
|
+#, no-wrap
|
|
|
+msgid "Subscription management"
|
|
|
+msgstr "Gestion des flux"
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./users/05_Configuration.md:150
|
|
|
+#, no-wrap
|
|
|
+msgid "Information"
|
|
|
+msgstr "Informations"
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./users/05_Configuration.md:158
|
|
|
+#, no-wrap
|
|
|
+msgid "Login"
|
|
|
+msgstr "Identification"
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./users/05_Configuration.md:162
|
|
|
+#, no-wrap
|
|
|
+msgid "Advanced"
|
|
|
+msgstr "Avancé"
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./users/05_Configuration.md:164
|
|
|
+#, no-wrap
|
|
|
+msgid "Retrieve a truncated stream from within FreshRSS"
|
|
|
+msgstr "Récupérer un flux tronqué à partir de FreshRSS"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:167
|
|
|
+msgid ""
|
|
|
+"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. :)"
|
|
|
+msgstr ""
|
|
|
+"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 "
|
|
|
+"fonctionne. :)"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:169
|
|
|
+msgid ""
|
|
|
+"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!"
|
|
|
+msgstr ""
|
|
|
+"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 "
|
|
|
+"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é à "
|
|
|
+"utiliser avec parcimonie !"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:171
|
|
|
+msgid ""
|
|
|
+"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 "
|
|
|
+"is unique to the page)."
|
|
|
+msgstr ""
|
|
|
+"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 "
|
|
|
+"commence par un id (qui est unique pour la page)."
|
|
|
+
|
|
|
+#. type: Title ####
|
|
|
+#: en/./users/05_Configuration.md:172
|
|
|
+#, no-wrap
|
|
|
+msgid "Example: Rue89"
|
|
|
+msgstr "Exemple : Rue89"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:175
|
|
|
+msgid ""
|
|
|
+"To find this path, you have to go to the address of one of the truncated "
|
|
|
+"articles (for example, http://www.rue89.com/2013/10/15/prof-maths-jai-"
|
|
|
+"atteint-lextase-dihn-pedagogie-inversee-246635). You look have to look for "
|
|
|
+"the \"block\" of HTML that corresponds to article content (in the source "
|
|
|
+"code!)."
|
|
|
+msgstr ""
|
|
|
+"Pour trouver ce chemin, il faut se rendre à l'adresse d'un des articles "
|
|
|
+"tronqués (par exemple http://www.rue89.com/2013/10/15/prof-maths-jai-atteint-"
|
|
|
+"lextase-dihn-pedagogie-inversee-246635). Il faut alors chercher le \"bloc\" "
|
|
|
+"HTML correspondant au contenu de l'article (dans le code source !)"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:177
|
|
|
+#, 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 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```.\n"
|
|
|
+msgstr "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```.\n"
|
|
|
+
|
|
|
+#. type: Title ####
|
|
|
+#: en/./users/05_Configuration.md:178
|
|
|
+#, no-wrap
|
|
|
+msgid "Add the corresponding classes to the article CSS path on the feed configuration page. Examples:"
|
|
|
+msgstr "Liste de correspondances site → chemin css"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/05_Configuration.md:184
|
|
|
+msgid "Rue89: ```#article .content```"
|
|
|
+msgstr "Rue89 : ```#article .content```"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/05_Configuration.md:184
|
|
|
+msgid "PCINpact: ```#actu_content```"
|
|
|
+msgstr "PCINpact : ```#actu_content```"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/05_Configuration.md:184
|
|
|
+msgid "Lesnumériques: ```article#body div.text.clearfix```"
|
|
|
+msgstr "Lesnumériques : ```article#body div.text.clearfix```"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/05_Configuration.md:184
|
|
|
+msgid "Phoronix: ```#main .content```"
|
|
|
+msgstr "Phoronix : ```#main .content```"
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./users/05_Configuration.md:185
|
|
|
+#, no-wrap
|
|
|
+msgid "Retrieve a truncated stream with external tools"
|
|
|
+msgstr "Récupérer un flux tronqué à l'aide d'outils externes"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/05_Configuration.md:188
|
|
|
+msgid ""
|
|
|
+"Complimentary tools can be used to retrieve full article content, such as:"
|
|
|
+msgstr ""
|
|
|
+"Des outils complémentaires peuvent être utilisés pour récupérer le contenu "
|
|
|
+"complet d'un article, comme :"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/05_Configuration.md:190
|
|
|
+msgid "[RSS-Bridge](https://github.com/RSS-Bridge/rss-bridge)"
|
|
|
+msgstr "[RSS-Bridge](https://github.com/RSS-Bridge/rss-bridge)"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/05_Configuration.md:190
|
|
|
+msgid "[Full-Text RSS](https://bitbucket.org/fivefilters/full-text-rss)"
|
|
|
+msgstr "[Full-Text RSS](https://bitbucket.org/fivefilters/full-text-rss)"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./users/06_Fever_API.md:1
|
|
|
+#, no-wrap
|
|
|
+msgid "FreshRSS - Fever API implementation"
|
|
|
+msgstr "FreshRSS - API compatible Fever"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Fever_API.md:5
|
|
|
+msgid ""
|
|
|
+"See the [page about our Google Reader compatible API](06_Mobile_access.md) "
|
|
|
+"for another possibility and general aspects of API access."
|
|
|
+msgstr ""
|
|
|
+"Voir la page [sur notre API compatible Google Reader](06_Mobile_access.md) "
|
|
|
+"pour une autre possibilité et des généralités sur l’accès par API."
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./users/06_Fever_API.md:6
|
|
|
+#, no-wrap
|
|
|
+msgid "RSS clients"
|
|
|
+msgstr "Clients compatibles"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Fever_API.md:11
|
|
|
+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 "
|
|
|
+"look. But we can **only** do that for free clients."
|
|
|
+msgstr ""
|
|
|
+"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."
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./users/06_Fever_API.md:12
|
|
|
+#, no-wrap
|
|
|
+msgid "Usage & Authentication"
|
|
|
+msgstr "Utilisation et authentification"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Fever_API.md:16
|
|
|
+msgid ""
|
|
|
+"Before you can start using this API, you have to enable and setup API "
|
|
|
+"access, which is [documented here](https://freshrss.github.io/FreshRSS/en/"
|
|
|
+"users/06_Mobile_access.html), and then reset the user’s API password."
|
|
|
+msgstr ""
|
|
|
+"Avant de pouvoir commencer à utiliser cette API, vvous devez activer et "
|
|
|
+"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."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Fever_API.md:18
|
|
|
+msgid ""
|
|
|
+"Then point your mobile application to the `fever.php` address (e.g. `https://"
|
|
|
+"freshrss.example.net/api/fever.php`)."
|
|
|
+msgstr ""
|
|
|
+"Connectez ensuite votre application mobile en utilisant l'adresse de l'API "
|
|
|
+"(e.g. `https://freshrss.example.net/api/fever.php`)."
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./users/06_Fever_API.md:19 en/./users/06_Mobile_access.md:44
|
|
|
+#, no-wrap
|
|
|
+msgid "Compatible clients"
|
|
|
+msgstr "Clients compatibles"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Fever_API.md:22
|
|
|
+msgid "Tested with:"
|
|
|
+msgstr "Testé avec :"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Fever_API.md:25
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"* Android\n"
|
|
|
+" * [Readably](https://play.google.com/store/apps/details?id=com.isaiasmatewos.readably) (Closed source)\n"
|
|
|
+msgstr ""
|
|
|
+"* Android\n"
|
|
|
+" * [Readably](https://play.google.com/store/apps/details?id=com.isaiasmatewos.readably) (Propriétaire)\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Fever_API.md:30
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"* iOS\n"
|
|
|
+" * [Fiery Feeds](https://apps.apple.com/app/fiery-feeds-rss-reader/id1158763303) (Closed source)\n"
|
|
|
+" * [Unread](https://apps.apple.com/app/unread-rss-reader/id1252376153) (Commercial)\n"
|
|
|
+" * [Reeder](https://www.reederapp.com/) (Commercial) (Use its Google Reader API / native FreshRSS option when possible)\n"
|
|
|
+msgstr ""
|
|
|
+"* iOS\n"
|
|
|
+" * [Fiery Feeds](https://apps.apple.com/app/fiery-feeds-rss-reader/id1158763303) (Propriétaire)\n"
|
|
|
+" * [Unread](https://apps.apple.com/app/unread-rss-reader/id1252376153) (Commercial)\n"
|
|
|
+" * [Reeder](https://www.reederapp.com/) (Commercial) (Connectez-vous plutôt par son option Google Reader API)\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Fever_API.md:33
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"* MacOS\n"
|
|
|
+" * [ReadKit](https://apps.apple.com/app/readkit/id588726889) (Commercial)\n"
|
|
|
+msgstr ""
|
|
|
+"* MacOS\n"
|
|
|
+" * [ReadKit](https://apps.apple.com/app/readkit/id588726889) (Commercial)\n"
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./users/06_Fever_API.md:35
|
|
|
+#, no-wrap
|
|
|
+msgid "Features"
|
|
|
+msgstr "Fonctionnalités"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Fever_API.md:38
|
|
|
+msgid "The following features are implemented:"
|
|
|
+msgstr "Les fonctionnalités suivantes sont implémentées :"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/06_Fever_API.md:48
|
|
|
+msgid "fetching categories"
|
|
|
+msgstr "récupération des catégories"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/06_Fever_API.md:48
|
|
|
+msgid "fetching feeds"
|
|
|
+msgstr "récupération des flux"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/06_Fever_API.md:48
|
|
|
+msgid ""
|
|
|
+"fetching RSS items (new, favorites, unread, by_id, by_feed, by_category, "
|
|
|
+"since)"
|
|
|
+msgstr ""
|
|
|
+"récupération des entrées (new, favorites, unread, by_id, by_feed, "
|
|
|
+"by_category,since)"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/06_Fever_API.md:48
|
|
|
+msgid "fetching favicons"
|
|
|
+msgstr "récupération des favicons"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/06_Fever_API.md:48
|
|
|
+msgid "setting read marker for item(s)"
|
|
|
+msgstr "marquage des entrées comme lues"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/06_Fever_API.md:48
|
|
|
+msgid "setting starred marker for item(s)"
|
|
|
+msgstr "marquage des entrées comme favoris"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/06_Fever_API.md:48
|
|
|
+msgid "setting read marker for feed"
|
|
|
+msgstr "marquage d'un flux comme lu"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/06_Fever_API.md:48
|
|
|
+msgid "setting read marker for category"
|
|
|
+msgstr "marquage d'une catégorie comme lue"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/06_Fever_API.md:48
|
|
|
+msgid "supports FreshRSS extensions, which use the `entry_before_display` hook"
|
|
|
+msgstr "support des extensions grace au hook `entry_before_display`"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Fever_API.md:50
|
|
|
+msgid "The following features are not supported:"
|
|
|
+msgstr "Les fonctionnalités suivantes ne sont pas implémentées :"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/06_Fever_API.md:52
|
|
|
+msgid ""
|
|
|
+"**Hot Links** aka **hot** as there is nothing in FreshRSS yet that is "
|
|
|
+"similar or could be used to simulate it."
|
|
|
+msgstr ""
|
|
|
+"« Hot Links » car il n'y a encore rien dans FreshRSS qui soit similaire ou "
|
|
|
+"qui puisse être utilisé pour le simuler."
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./users/06_Fever_API.md:53
|
|
|
+#, no-wrap
|
|
|
+msgid "Testing and debugging"
|
|
|
+msgstr "Tester et déboguer"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Fever_API.md:56
|
|
|
+msgid ""
|
|
|
+"If this API does not work as expected in your RSS reader, you can test it "
|
|
|
+"manually with a tool like [Postman](https://www.getpostman.com/)."
|
|
|
+msgstr ""
|
|
|
+"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/)."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Fever_API.md:58
|
|
|
+msgid ""
|
|
|
+"Configure a POST request to the URL https://freshrss.example.net/api/fever."
|
|
|
+"php?api which should give you the result:"
|
|
|
+msgstr ""
|
|
|
+"Envoyer une requête POST à l'adresse https://freshrss.example.net/api/fever."
|
|
|
+"php?api devrait vous renvoyer le résultat suivant :"
|
|
|
+
|
|
|
+#. type: Code fence info string
|
|
|
+#: en/./users/06_Fever_API.md:58 en/./users/06_Fever_API.md:80
|
|
|
+#, no-wrap
|
|
|
+msgid "json"
|
|
|
+msgstr "json"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Fever_API.md:58
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"{\n"
|
|
|
+"\t\"api_version\": 3,\n"
|
|
|
+"\t\"auth\": 0\n"
|
|
|
+"}\n"
|
|
|
+msgstr ""
|
|
|
+"{\n"
|
|
|
+"\t\"api_version\": 3,\n"
|
|
|
+"\t\"auth\": 0\n"
|
|
|
+"}\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Fever_API.md:65
|
|
|
+msgid "Great, the base setup seems to work!"
|
|
|
+msgstr "Super, la configuration de base fonctionne !"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Fever_API.md:68
|
|
|
+msgid ""
|
|
|
+"Now lets try an authenticated call. Fever uses an `api_key`, which is the "
|
|
|
+"MD5 hash of `\"$username:$apiPassword\"`. Assuming the user is `kevin` and "
|
|
|
+"the password `freshrss`, here is a command-line example to compute the "
|
|
|
+"resulting `api_key`"
|
|
|
+msgstr ""
|
|
|
+"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 "
|
|
|
+"est `kevin` et que son mot de passe est `freshrss`, voici la commande à "
|
|
|
+"lancer pour calculer la valeur du paramètre `api_key` :"
|
|
|
+
|
|
|
+#. type: Code fence info string
|
|
|
+#: en/./users/06_Fever_API.md:69 en/./users/06_Fever_API.md:75
|
|
|
+#: en/./users/06_Mobile_access.md:69
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:37
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:45
|
|
|
+#, no-wrap
|
|
|
+msgid "sh"
|
|
|
+msgstr "sh"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Fever_API.md:69
|
|
|
+#, no-wrap
|
|
|
+msgid "api_key=`echo -n \"kevin:freshrss\" | md5sum | cut -d' ' -f1`\n"
|
|
|
+msgstr "api_key=`echo -n \"kevin:freshrss\" | md5sum | cut -d' ' -f1`\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Fever_API.md:74
|
|
|
+msgid ""
|
|
|
+"Add a body to your POST request encoded as `form-data` and one key named "
|
|
|
+"`api_key` with the value `your-password-hash`:"
|
|
|
+msgstr ""
|
|
|
+"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 :"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Fever_API.md:75
|
|
|
+#, no-wrap
|
|
|
+msgid "curl -s -F \"api_key=$api_key\" 'https://freshrss.example.net/api/fever.php?api'\n"
|
|
|
+msgstr "curl -s -F \"api_key=$api_key\" 'https://freshrss.exemple.net/api/fever.php?api'\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Fever_API.md:80
|
|
|
+msgid "This should give:"
|
|
|
+msgstr "Vous devriez obtenir le résultat suivant :"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Fever_API.md:80
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"{\n"
|
|
|
+"\t\"api_version\": 3,\n"
|
|
|
+"\t\"auth\": 1,\n"
|
|
|
+"\t\"last_refreshed_on_time\": \"1520013061\"\n"
|
|
|
+"}\n"
|
|
|
+msgstr ""
|
|
|
+"{\n"
|
|
|
+"\t\"api_version\": 3,\n"
|
|
|
+"\t\"auth\": 1,\n"
|
|
|
+"\t\"last_refreshed_on_time\": \"1520013061\"\n"
|
|
|
+"}\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Fever_API.md:88
|
|
|
+msgid ""
|
|
|
+"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."
|
|
|
+msgstr ""
|
|
|
+"Parfait, maintenant vous êtes autentifié et vous pouvez commencer à tester "
|
|
|
+"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 [documentation "
|
|
|
+"officielle de Fever](https://feedafever.com/api)."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Fever_API.md:90
|
|
|
+msgid "Some basic calls are:"
|
|
|
+msgstr "Voici quelques exemples simples d'appels réalisables :"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/06_Fever_API.md:100
|
|
|
+msgid "https://freshrss.example.net/api/fever.php?api&items"
|
|
|
+msgstr "https://freshrss.example.net/api/fever.php?api&items"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/06_Fever_API.md:100
|
|
|
+msgid "https://freshrss.example.net/api/fever.php?api&feeds"
|
|
|
+msgstr "https://freshrss.example.net/api/fever.php?api&feeds"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/06_Fever_API.md:100
|
|
|
+msgid "https://freshrss.example.net/api/fever.php?api&groups"
|
|
|
+msgstr "https://freshrss.example.net/api/fever.php?api&groups"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/06_Fever_API.md:100
|
|
|
+msgid "https://freshrss.example.net/api/fever.php?api&unread_item_ids"
|
|
|
+msgstr "https://freshrss.example.net/api/fever.php?api&unread_item_ids"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/06_Fever_API.md:100
|
|
|
+msgid "https://freshrss.example.net/api/fever.php?api&saved_item_ids"
|
|
|
+msgstr "https://freshrss.example.net/api/fever.php?api&saved_item_ids"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/06_Fever_API.md:100
|
|
|
+msgid "https://freshrss.example.net/api/fever.php?api&items&since_id=some_id"
|
|
|
+msgstr "https://freshrss.example.net/api/fever.php?api&items&since_id=some_id"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/06_Fever_API.md:100
|
|
|
+msgid "https://freshrss.example.net/api/fever.php?api&items&max_id=some_id"
|
|
|
+msgstr "https://freshrss.example.net/api/fever.php?api&items&max_id=some_id"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/06_Fever_API.md:100
|
|
|
+msgid ""
|
|
|
+"https://freshrss.example.net/api/fever.php?api&mark=item&as=read&id=some_id"
|
|
|
+msgstr ""
|
|
|
+"https://freshrss.example.net/api/fever.php?api&mark=item&as=read&id=some_id"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/06_Fever_API.md:100
|
|
|
+msgid ""
|
|
|
+"https://freshrss.example.net/api/fever.php?api&mark=item&as=unread&id=some_id"
|
|
|
+msgstr ""
|
|
|
+"https://freshrss.example.net/api/fever.php?api&mark=item&as=unread&id=some_id"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Fever_API.md:102
|
|
|
+msgid ""
|
|
|
+"Replace `some_id` with a real ID from your `freshrss_username_entry` "
|
|
|
+"database."
|
|
|
+msgstr ""
|
|
|
+"Remplacez `some_id` par un identifiant réel de votre base de données "
|
|
|
+"`freshrss_username_entry`."
|
|
|
+
|
|
|
+#. type: Title ###
|
|
|
+#: en/./users/06_Fever_API.md:103
|
|
|
+#, no-wrap
|
|
|
+msgid "Debugging"
|
|
|
+msgstr "Déboguer"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Fever_API.md:106
|
|
|
+msgid ""
|
|
|
+"If nothing helps and your client is still misbehaving, you can add the "
|
|
|
+"following lines to the beginning of the `fever.api` file to determine the "
|
|
|
+"cause of the problems:"
|
|
|
+msgstr ""
|
|
|
+"Si rien ne fonctionne correctement et que votre client se comporte "
|
|
|
+"étrangement, vous pouvez ajouter les quelques lignes suivantes au début du "
|
|
|
+"fichier `fever.api` pour déterminer la cause des problèmes rencontrés :"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Fever_API.md:107
|
|
|
+#, no-wrap
|
|
|
+msgid "file_put_contents(__DIR__ . '/fever.log', $_SERVER['HTTP_USER_AGENT'] . ': ' . json_encode($_REQUEST) . PHP_EOL, FILE_APPEND);\n"
|
|
|
+msgstr "file_put_contents(__DIR__ . '/fever.log', $_SERVER['HTTP_USER_AGENT'] . ': ' . json_encode($_REQUEST) . PHP_EOL, FILE_APPEND);\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Fever_API.md:112
|
|
|
+msgid ""
|
|
|
+"Then use your RSS client to query the API and afterwards check the file "
|
|
|
+"`fever.log`."
|
|
|
+msgstr ""
|
|
|
+"Utilisez ensuite votre client RSS pour interroger l'API et vérifier le "
|
|
|
+"fichier `fever.log`."
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./users/06_Fever_API.md:113
|
|
|
+#, no-wrap
|
|
|
+msgid "Credits"
|
|
|
+msgstr "Remerciements"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Fever_API.md:115
|
|
|
+msgid ""
|
|
|
+"This plugin was inspired by the [tinytinyrss-fever-plugin](https://github."
|
|
|
+"com/dasmurphy/tinytinyrss-fever-plugin)."
|
|
|
+msgstr ""
|
|
|
+"Ce plugin a été inspiré par le [tinytinyrss-fever-plugin](https://github.com/"
|
|
|
+"dasmurphy/tinytinyrss-fever-plugin)."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Mobile_access.md:2
|
|
|
+msgid ""
|
|
|
+"This page assumes you have completed the [server setup](../"
|
|
|
+"admins/02_Installation.md)."
|
|
|
+msgstr ""
|
|
|
+"Cette page suppose que vous ayez fini [l’installation du serveur]"
|
|
|
+"(01_Installation.md)."
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./users/06_Mobile_access.md:3
|
|
|
+#, no-wrap
|
|
|
+msgid "Enable the API in FreshRSS"
|
|
|
+msgstr "Activer l’API dans FreshRSS"
|
|
|
+
|
|
|
+#. type: Bullet: '1. '
|
|
|
+#: en/./users/06_Mobile_access.md:9
|
|
|
+msgid ""
|
|
|
+"Under the section “Authentication”, enable the option “Allow API access "
|
|
|
+"(required for mobile apps)”."
|
|
|
+msgstr ""
|
|
|
+"Dans la section “Authentification”, cocher l’option “Autoriser l’accès par "
|
|
|
+"API (nécessaire pour les applis mobiles)”."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Mobile_access.md:9
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"2. Under the section “Profile”, fill-in the field “API password (e.g., for mobile apps)”.\n"
|
|
|
+"\t* Every user must define an API password.\n"
|
|
|
+"\t* The reason for an API-specific password is that it may be used in less safe situations than the main password, and does not grant access to as many things.\n"
|
|
|
+msgstr ""
|
|
|
+"2. Dans la section “Profil”, remplir le champ “Mot de passe API (ex. : pour applis mobiles)”.\n"
|
|
|
+"\t* Chaque utilisateur doit choisir son mot de passe API.\n"
|
|
|
+"\t* La raison d’être d’un mot de passe API\n"
|
|
|
+" différent du mot de passe principal est que le mot de passe API est potentiellement utilisé de manière moins sûre, mais il permet aussi moins de choses.\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Mobile_access.md:12
|
|
|
+msgid ""
|
|
|
+"The rest of this page is about the Google Reader compatible API. See the "
|
|
|
+"[page about the Fever compatible API](06_Fever_API.md) for another "
|
|
|
+"possibility."
|
|
|
+msgstr ""
|
|
|
+"Le reste de cette page concerne l’API compatible Google Reader. Voir la "
|
|
|
+"[page sur l’API compatible Fever](06_Fever_API.md) pour une autre "
|
|
|
+"possibilité."
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./users/06_Mobile_access.md:14
|
|
|
+#, no-wrap
|
|
|
+msgid "Testing"
|
|
|
+msgstr "Tester"
|
|
|
+
|
|
|
+#. type: Bullet: '3. '
|
|
|
+#: en/./users/06_Mobile_access.md:21
|
|
|
+msgid ""
|
|
|
+"Under the section “Profile”, click on the link like `https://rss.example.net/"
|
|
|
+"api/` next to the field “API password”."
|
|
|
+msgstr ""
|
|
|
+"Dans la section “Profil”, cliquer sur le lien de la forme `https://rss."
|
|
|
+"example.net/api/` à côté du champ “Mot de passe API”."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Mobile_access.md:21
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"4. Click on first link “Check full server configuration”:\n"
|
|
|
+"\t* If you get *PASS* then you are done, all is good: you may proceed to step 6.\n"
|
|
|
+"\t* If you get *Bad Request!* or *Not Found*, then your server probably does not accept slashes `/` that are escaped `%2F`. Proceed to step 5.\n"
|
|
|
+"\t* If you get any other error message, proceed to step 5.\n"
|
|
|
+msgstr ""
|
|
|
+"4. Cliquer sur le premier lien “Check full server configuration”:\n"
|
|
|
+"\t* Si vous obtenez `PASS`, tout est bon : passer à l’étape 6.\n"
|
|
|
+"\t* Si vous obtenez *Bad Request!* ou *Not Found*, alors votre serveur ne semble pas accepter les slashs `/` qui sont encodés `%2F`. Passer à l’étape 5.\n"
|
|
|
+"\t* Si vous obtenez un autre message d’erreur, passer à l’étape 5.\n"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./users/06_Mobile_access.md:23
|
|
|
+#, no-wrap
|
|
|
+msgid "Fix server configuration"
|
|
|
+msgstr "Déboguer la configuration du serveur"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Mobile_access.md:42
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"5. Click on the second link “Check partial server configuration (without `%2F` support)”:\n"
|
|
|
+"\t* If you get `PASS`, then the problem is indeed that your server does not accept slashes `/` that are escaped `%2F`.\n"
|
|
|
+"\t\t* With Apache, remember the directive [`AllowEncodedSlashes On`](http://httpd.apache.org/docs/trunk/mod/core.html#allowencodedslashes)\n"
|
|
|
+"\t\t* Or use a client that does not escape slashes (such as EasyRSS), in which case proceed to step 6.\n"
|
|
|
+"\t* If you get *Service Unavailable!*, then check from step 1 again.\n"
|
|
|
+"\t* With __Apache__:\n"
|
|
|
+"\t\t* If you get *FAIL getallheaders!*, the combination of your PHP version and your Web server does not provide access to [`getallheaders`](http://php.net/getallheaders)\n"
|
|
|
+"\t\t\t* Turn on Apache `mod_setenvif` (often enabled by default), or `mod_rewrite` with the following procedure:\n"
|
|
|
+"\t\t\t\t* Allow [`FileInfo` in `.htaccess`](http://httpd.apache.org/docs/trunk/mod/core.html#allowoverride): see the [server setup](../admins/02_Installation.md) again.\n"
|
|
|
+"\t\t\t\t* Enable [`mod_rewrite`](http://httpd.apache.org/docs/trunk/mod/mod_rewrite.html):\n"
|
|
|
+"\t\t\t\t\t* With Debian / Ubuntu: `sudo a2enmod rewrite`\n"
|
|
|
+"\t* With __nginx__:\n"
|
|
|
+"\t\t* If you get *Bad Request!*, check your server `PATH_INFO` configuration.\n"
|
|
|
+"\t\t* If you get *File not found!*, check your server `fastcgi_split_path_info`.\n"
|
|
|
+"\t* If you get *FAIL 64-bit or GMP extension!*, then your PHP version does not pass the requirement of being 64-bit and/or have PHP [GMP](http://php.net/gmp) extension.\n"
|
|
|
+"\t\t* The easiest is to add the GMP extension. On Debian / Ubuntu: `sudo apt install php-gmp`\n"
|
|
|
+"\t* Update and try again from step 3.\n"
|
|
|
+msgstr ""
|
|
|
+"5. Cliquer sur le second lien “Check partial server configuration (without `%2F` support)”:\n"
|
|
|
+"\t* Si vous obtenez `PASS`, alors le problème est bien que votre serveur n’accepte pas les slashs `/` qui sont encodés `%2F`.\n"
|
|
|
+"\t\t* Avec Apache, vérifiez la directive [`AllowEncodedSlashes On`](http://httpd.apache.org/docs/trunk/mod/core.html#allowencodedslashes)\n"
|
|
|
+"\t\t* Ou utilisez un client qui n’encode pas les slashs (comme EasyRSS), auquel cas passer à l’étape 6.\n"
|
|
|
+"\t* Si vous obtenez *Service Unavailable!*, retourner à l’étape 6.\n"
|
|
|
+"\t* Avec __Apache__:\n"
|
|
|
+"\t\t* Si vous obtenez *FAIL getallheaders!*, alors la combinaison de votre version de PHP et de votre serveur Web ne permet pas l’accès à [`getallheaders`](http://php.net/getallheaders)\n"
|
|
|
+"\t\t\t* Activer Apache `mod_setenvif` (souvent activé par défault), ou `mod_rewrite` avec la procédure suivante :\n"
|
|
|
+"\t\t\t\t* Autoriser [`FileInfo` dans `.htaccess`](http://httpd.apache.org/docs/trunk/mod/core.html#allowoverride) : revoir [l’installation du serveur](01_Installation.md).\n"
|
|
|
+"\t\t\t\t* Activer [`mod_rewrite`](http://httpd.apache.org/docs/trunk/mod/mod_rewrite.html) :\n"
|
|
|
+"\t\t\t\t\t* Sur Debian / Ubuntu : `sudo a2enmod rewrite`\n"
|
|
|
+"\t* Avec __nginx__:\n"
|
|
|
+"\t\t* Si vous obtenez *Bad Request!*, vérifier la configuration `PATH_INFO` de votre serveur.\n"
|
|
|
+"\t\t* Si vous obtenez *File not found!*, vérifier la configuration `fastcgi_split_path_info` de votre serveur.\n"
|
|
|
+"\t* Si vous obtenez *FAIL 64-bit or GMP extension!*, alors votre installation PHP soit n’est pas en 64 bit, soit n’a pas l’extension PHP [GMP](http://php.net/gmp) activée.\n"
|
|
|
+"\t\t* Le plus simple est d’activer l’extension GMP. Sur Debian / Ubuntu : `sudo apt install php-gmp`\n"
|
|
|
+"\t* Mettre à jour et retourner à l’étape 3.\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Mobile_access.md:48
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"6. On the same FreshRSS API page, note the address given under “Your API address”, like `https://freshrss.example.net/api/greader.php`\n"
|
|
|
+"\t* Type the API address in a client, together with your FreshRSS username, and the corresponding special API password.\n"
|
|
|
+msgstr ""
|
|
|
+"6. 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`\n"
|
|
|
+"\t* 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.\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Mobile_access.md:63
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"7. Pick a client supporting a Google Reader-like API. Selection:\n"
|
|
|
+"\t* Android\n"
|
|
|
+"\t\t* [News+](https://play.google.com/store/apps/details?id=com.noinnion.android.newsplus) with [News+ Google Reader extension](https://play.google.com/store/apps/details?id=com.noinnion.android.newsplus.extension.google_reader) (Closed source)\n"
|
|
|
+"\t\t* [FeedMe 3.5.3+](https://play.google.com/store/apps/details?id=com.seazon.feedme) (Closed source)\n"
|
|
|
+"\t\t* [EasyRSS](https://github.com/Alkarex/EasyRSS) (Open source, [F-Droid](https://f-droid.org/packages/org.freshrss.easyrss/))\n"
|
|
|
+"\t* Linux\n"
|
|
|
+"\t\t* [FeedReader 2.0+](https://jangernert.github.io/FeedReader/) (Open source)\n"
|
|
|
+"\t* MacOS\n"
|
|
|
+"\t\t* [Vienna RSS](http://www.vienna-rss.com/) (Open source)\n"
|
|
|
+"\t\t* [Reeder](https://www.reederapp.com/) (Commercial)\n"
|
|
|
+"\t* iOS\n"
|
|
|
+"\t\t* [Reeder](https://www.reederapp.com/) (Commercial)\n"
|
|
|
+"\t* Firefox\n"
|
|
|
+"\t\t* [FreshRSS-Notify](https://addons.mozilla.org/firefox/addon/freshrss-notify-webextension/) (Open source)\n"
|
|
|
+msgstr ""
|
|
|
+"7. Vous pouvez maintenant tester sur une application mobile:\n"
|
|
|
+"\t* Android\n"
|
|
|
+"\t\t* [News+](https://play.google.com/store/apps/details?id=com.noinnion.android.newsplus) avec [News+ Google Reader extension](https://play.google.com/store/apps/details?id=com.noinnion.android.newsplus.extension.google_reader) (Closed source)\n"
|
|
|
+"\t\t* [FeedMe 3.5.3+](https://play.google.com/store/apps/details?id=com.seazon.feedme) (Propriétaire)\n"
|
|
|
+"\t\t* [EasyRSS](https://github.com/Alkarex/EasyRSS) (Libre, [F-Droid](https://f-droid.org/packages/org.freshrss.easyrss/))\n"
|
|
|
+"\t* Linux\n"
|
|
|
+"\t\t* [FeedReader 2.0+](https://jangernert.github.io/FeedReader/) (Libre)\n"
|
|
|
+"\t* MacOS\n"
|
|
|
+"\t\t* [Vienna RSS](http://www.vienna-rss.com/) (Libre)\n"
|
|
|
+"\t\t* [Reeder](https://www.reederapp.com/) (Commercial)\n"
|
|
|
+"\t* iOS\n"
|
|
|
+"\t\t* [Reeder](https://www.reederapp.com/) (Commercial)\n"
|
|
|
+"\t* Firefox\n"
|
|
|
+"\t\t* [FreshRSS-Notify](https://addons.mozilla.org/firefox/addon/freshrss-notify-webextension/) (Libre)\n"
|
|
|
+
|
|
|
+#. type: Title #
|
|
|
+#: en/./users/06_Mobile_access.md:65
|
|
|
+#, no-wrap
|
|
|
+msgid "Google Reader compatible API"
|
|
|
+msgstr "API compatible Google Reader"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Mobile_access.md:68
|
|
|
+msgid "Examples of basic queries:"
|
|
|
+msgstr "Exemples de requêtes simples :"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/06_Mobile_access.md:69
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"# Initial login, using API password (Email and Passwd can be given either as GET, or POST - better)\n"
|
|
|
+"curl 'https://freshrss.example.net/api/greader.php/accounts/ClientLogin?Email=alice&Passwd=Abcdef123456'\n"
|
|
|
+"SID=alice/8e6845e089457af25303abc6f53356eb60bdb5f8\n"
|
|
|
+"Auth=alice/8e6845e089457af25303abc6f53356eb60bdb5f8\n"
|
|
|
+"\n"
|
|
|
+"# Examples of read-only requests\n"
|
|
|
+"curl -s -H \"Authorization:GoogleLogin auth=alice/8e6845e089457af25303abc6f53356eb60bdb5f8\" \\\n"
|
|
|
+" 'https://freshrss.example.net/api/greader.php/reader/api/0/subscription/list?output=json'\n"
|
|
|
+"\n"
|
|
|
+"curl -s -H \"Authorization:GoogleLogin auth=alice/8e6845e089457af25303abc6f53356eb60bdb5f8\" \\\n"
|
|
|
+" 'https://freshrss.example.net/api/greader.php/reader/api/0/unread-count?output=json'\n"
|
|
|
+"\n"
|
|
|
+"curl -s -H \"Authorization:GoogleLogin auth=alice/8e6845e089457af25303abc6f53356eb60bdb5f8\" \\\n"
|
|
|
+" 'https://freshrss.example.net/api/greader.php/reader/api/0/tag/list?output=json'\n"
|
|
|
+"\n"
|
|
|
+"# Retrieve a token for requests making modifications\n"
|
|
|
+"curl -H \"Authorization:GoogleLogin auth=alice/8e6845e089457af25303abc6f53356eb60bdb5f8\" \\\n"
|
|
|
+" 'https://freshrss.example.net/api/greader.php/reader/api/0/token'\n"
|
|
|
+"8e6845e089457af25303abc6f53356eb60bdb5f8ZZZZZZZZZZZZZZZZZ\n"
|
|
|
+"\n"
|
|
|
+"# Get articles, piped to jq for easier JSON reading\n"
|
|
|
+"curl -s -H \"Authorization:GoogleLogin auth=alice/8e6845e089457af25303abc6f53356eb60bdb5f8\" \\\n"
|
|
|
+" 'https://freshrss.example.net/api/greader.php/reader/api/0/stream/contents/reading-list' | jq .\n"
|
|
|
+msgstr ""
|
|
|
+"# Authentification utilisant le mot de passe API (Email et Passwd peuvent être passés en GET, ou POST - mieux)\n"
|
|
|
+"curl 'https://freshrss.example.net/api/greader.php/accounts/ClientLogin?Email=alice&Passwd=Abcdef123456'\n"
|
|
|
+"SID=alice/8e6845e089457af25303abc6f53356eb60bdb5f8\n"
|
|
|
+"Auth=alice/8e6845e089457af25303abc6f53356eb60bdb5f8\n"
|
|
|
+"\n"
|
|
|
+"# Exemples de requêtes en lecture\n"
|
|
|
+"curl -s -H \"Authorization:GoogleLogin auth=alice/8e6845e089457af25303abc6f53356eb60bdb5f8\" \\\n"
|
|
|
+" 'https://freshrss.example.net/api/greader.php/reader/api/0/subscription/list?output=json'\n"
|
|
|
+"\n"
|
|
|
+"curl -s -H \"Authorization:GoogleLogin auth=alice/8e6845e089457af25303abc6f53356eb60bdb5f8\" \\\n"
|
|
|
+" 'https://freshrss.example.net/api/greader.php/reader/api/0/unread-count?output=json'\n"
|
|
|
+"\n"
|
|
|
+"curl -s -H \"Authorization:GoogleLogin auth=alice/8e6845e089457af25303abc6f53356eb60bdb5f8\" \\\n"
|
|
|
+" 'https://freshrss.example.net/api/greader.php/reader/api/0/tag/list?output=json'\n"
|
|
|
+"\n"
|
|
|
+"# Demande de jeton pour faire de requêtes de modification\n"
|
|
|
+"curl -H \"Authorization:GoogleLogin auth=alice/8e6845e089457af25303abc6f53356eb60bdb5f8\" \\\n"
|
|
|
+" 'https://freshrss.example.net/api/greader.php/reader/api/0/token'\n"
|
|
|
+"8e6845e089457af25303abc6f53356eb60bdb5f8ZZZZZZZZZZZZZZZZZ\n"
|
|
|
+"\n"
|
|
|
+"# Récupère les articles, envoyés à jq pour une lecture JSON plus facile\n"
|
|
|
+"curl -s -H \"Authorization:GoogleLogin auth=alice/8e6845e089457af25303abc6f53356eb60bdb5f8\" \\\n"
|
|
|
+" 'https://freshrss.example.net/api/greader.php/reader/api/0/stream/contents/reading-list' | jq .\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:2
|
|
|
+msgid ""
|
|
|
+"We may not have answered all of your questions in the previous sections. The "
|
|
|
+"FAQ contains some questions that have not been answered elsewhere."
|
|
|
+msgstr ""
|
|
|
+"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."
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:3
|
|
|
+#, no-wrap
|
|
|
+msgid "What is `/i` at the end of the application URL?"
|
|
|
+msgstr "C'est quoi ce `/i` à la fin de l'URL ?"
|
|
|
+
|
|
|
+#. 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:"
|
|
|
+msgstr ""
|
|
|
+"Bien entendu, le ```/i``` n'est pas là pour faire joli ! Il s'agit d'une "
|
|
|
+"question de performances et de praticité :"
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:11
|
|
|
+msgid ""
|
|
|
+"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."
|
|
|
+msgstr ""
|
|
|
+"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."
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:11
|
|
|
+msgid ""
|
|
|
+"The ```./p/``` public root can be served without any HTTP access "
|
|
|
+"restrictions. Whereas it could be implemented in ```./p/i/```."
|
|
|
+msgstr ""
|
|
|
+"La racine publique ```./p/``` peut être servie sans restriction d'accès HTTP "
|
|
|
+"(qui peut avantageusement être mise en place dans ```./p/i/```)."
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:11
|
|
|
+msgid ""
|
|
|
+"It avoids problems while serving public resources like ```favicon.ico```, "
|
|
|
+"```robots.txt```, etc."
|
|
|
+msgstr ""
|
|
|
+"Cela permet d'éviter des problèmes pour des fichiers qui doivent être "
|
|
|
+"publics pour bien fonctionner, comme ```favicon.ico```, ```robots.txt```, "
|
|
|
+"etc."
|
|
|
+
|
|
|
+#. type: Bullet: '* '
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:11
|
|
|
+msgid ""
|
|
|
+"It allows the logo to be displayed instead of a white page while hitting a "
|
|
|
+"restriction or a delay during the loading process."
|
|
|
+msgstr ""
|
|
|
+"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."
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:12
|
|
|
+#, no-wrap
|
|
|
+msgid "Why is `robots.txt` located in a sub-folder?"
|
|
|
+msgstr "Pourquoi le ```robots.txt``` se trouve dans un sous-répertoire ?"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:15
|
|
|
+msgid ""
|
|
|
+"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."
|
|
|
+msgstr ""
|
|
|
+"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```."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:17
|
|
|
+msgid ""
|
|
|
+"As explained in the [security 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 "
|
|
|
+"the application."
|
|
|
+msgstr ""
|
|
|
+"Comme expliqué dans les [conseils de sécurité](01_Installation.md#conseils-"
|
|
|
+"de-securite), il est recommandé de faire pointer un nom de domaine vers ce "
|
|
|
+"sous-répertoire afin que seule la partie publique ne soit accessible par un "
|
|
|
+"navigateur web. De cette manière https://demo.freshrss.org/ pointe vers le "
|
|
|
+"répertoire ```./p``` et le ```robots.txt``` se trouve bien à la racine du "
|
|
|
+"site : https://demo.freshrss.org/robots.txt."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:19
|
|
|
+msgid "The same principle applies to `favicon.ico` and `.htaccess`."
|
|
|
+msgstr ""
|
|
|
+"L'explication est la même pour les fichiers ```favicon.ico``` et ```."
|
|
|
+"htaccess```."
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:20
|
|
|
+#, no-wrap
|
|
|
+msgid "Why do I have errors while registering a feed?"
|
|
|
+msgstr "Pourquoi j'ai des erreurs quand j'essaye d'enregistrer un flux ?"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:26
|
|
|
+msgid ""
|
|
|
+"There can be different origins for that problem. The feed syntax can be "
|
|
|
+"invalid, it can be unrecognized by the SimplePie library, the hosting server "
|
|
|
+"can be the root of the problem, or FreshRSS can be buggy. The first step is "
|
|
|
+"to identify what causes the problem. Here are the steps to follow:"
|
|
|
+msgstr ""
|
|
|
+"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 "
|
|
|
+"dans un premier temps déterminer la cause du problème.Voici la liste des "
|
|
|
+"étapes à suivre pour la déterminer :"
|
|
|
+
|
|
|
+#. type: Bullet: '1. '
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:30
|
|
|
+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."
|
|
|
+msgstr ""
|
|
|
+"__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."
|
|
|
+
|
|
|
+#. 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."
|
|
|
+msgstr ""
|
|
|
+"__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."
|
|
|
+
|
|
|
+#. 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 "
|
|
|
+"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."
|
|
|
+msgstr ""
|
|
|
+"__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."
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:31
|
|
|
+#, no-wrap
|
|
|
+msgid "How can you change a forgotten password?"
|
|
|
+msgstr "Comment changer un mot de passe oublié ?"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:35
|
|
|
+msgid ""
|
|
|
+"Since the [1.10.0](https://github.com/FreshRSS/FreshRSS/releases/tag/1.10.0) "
|
|
|
+"release, admins can change user passwords directly from the interface. This "
|
|
|
+"interface is available under ```Administration → Manage users```. Select a "
|
|
|
+"user, enter a password, and validate."
|
|
|
+msgstr ""
|
|
|
+"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 saisir un mot de passe et de valider."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:37
|
|
|
+msgid ""
|
|
|
+"Since the [1.8.0](https://github.com/FreshRSS/FreshRSS/releases/tag/1.8.0) "
|
|
|
+"release, admins can change user passwords using a terminal. It worth "
|
|
|
+"mentioning that you must have access to PHP CLI. Open a terminal, and type "
|
|
|
+"the following command:"
|
|
|
+msgstr ""
|
|
|
+"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 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 la commande suivante :"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:37
|
|
|
+#, no-wrap
|
|
|
+msgid "./cli/update_user.php --user <username> --password <password>\n"
|
|
|
+msgstr ""
|
|
|
+"./cli/update_user.php --user <username> --password <password>\n"
|
|
|
+"\n"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:41
|
|
|
+msgid ""
|
|
|
+"For more information on that matter, please refer to the [dedicated "
|
|
|
+"documentation](../../cli/README.md)."
|
|
|
+msgstr ""
|
|
|
+"Pour plus d'information à ce sujet, il existe la [documentation dédiée]"
|
|
|
+"(../../cli/README.md)."
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:42
|
|
|
+#, no-wrap
|
|
|
+msgid "Permissions under SELinux"
|
|
|
+msgstr "Gérer les permissions sous SELinux"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:45
|
|
|
+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 "
|
|
|
+"some data sub-directories. The following command should be executed as root "
|
|
|
+"to fix this problem:"
|
|
|
+msgstr ""
|
|
|
+"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 "
|
|
|
+"faut donc exécuter la commande suivante en tant que root:"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:45
|
|
|
+#, no-wrap
|
|
|
+msgid ""
|
|
|
+"semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/FreshRSS/data(/.*)?'\n"
|
|
|
+"restorecon -Rv /usr/share/FreshRSS/data\n"
|
|
|
+msgstr ""
|
|
|
+"semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/FreshRSS/data(/.*)?'\n"
|
|
|
+"restorecon -Rv /usr/share/FreshRSS/data\n"
|
|
|
+
|
|
|
+#. type: Title ##
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:50
|
|
|
+#, no-wrap
|
|
|
+msgid "Why do I have a blank page while trying to configure the sharing options?"
|
|
|
+msgstr "Pourquoi y a-t-il une page blanche lorsque je configure les options de partage ?"
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:53
|
|
|
+msgid ""
|
|
|
+"The `sharing` word in the URL is a trigger word for some ad-blocker rules. "
|
|
|
+"Starting with version 1.16, `sharing` has been replaced by `integration` in "
|
|
|
+"the faulty URL while keeping the exact same wording throughout the "
|
|
|
+"application."
|
|
|
+msgstr ""
|
|
|
+"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."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:55
|
|
|
+msgid ""
|
|
|
+"If you are using a version prior to 1.16, you can disable your ad-blocker "
|
|
|
+"for FreshRSS or you can add a rule to allow the `sharing` page to be "
|
|
|
+"accessed."
|
|
|
+msgstr ""
|
|
|
+"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 "
|
|
|
+"permettre la consultation de la page de configuration « partage »."
|
|
|
+
|
|
|
+#. type: Plain text
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:57
|
|
|
+msgid "Examples with _uBlock_:"
|
|
|
+msgstr "Exemples avec _uBlock_ :"
|
|
|
+
|
|
|
+#. type: Bullet: '- '
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:59
|
|
|
+msgid ""
|
|
|
+"Whitelist your FreshRSS instance by adding it in _uBlock > Open the "
|
|
|
+"dashboard > Whitelist_."
|
|
|
+msgstr ""
|
|
|
+"Ajoutez votre instance FreshRSS à la liste blanche de en l'ajoutant dans "
|
|
|
+"_uBlock > Ouvrir le tableau de bord > Liste blanche_."
|
|
|
+
|
|
|
+#. type: Bullet: '- '
|
|
|
+#: en/./users/07_Frequently_Asked_Questions.md:59
|
|
|
+msgid ""
|
|
|
+"Authorize your FreshRSS instance to call `sharing` configuration page by "
|
|
|
+"adding the rule `*sharing,domain=~yourdomain.com` in _uBlock > Open the "
|
|
|
+"dashboard > My filters_"
|
|
|
+msgstr ""
|
|
|
+"Autorisez votre instance FreshRSS à appeler la page de configuration "
|
|
|
+"`sharing` en ajoutant la règle `*sharing,domain=~votredomaine.com` dans "
|
|
|
+"_uBlock > Ouvrir le fichier tableau de bord > Mes filtres_"
|
|
|
+
|
|
|
+#, fuzzy
|
|
|
+#~| msgid ""
|
|
|
+#~| "As explained in the [security 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 the application."
|
|
|
+#~ msgid ""
|
|
|
+#~ "As explained in the [security section](/en/User_documentation/"
|
|
|
+#~ "Installation/Security), it is 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.\n"
|
|
|
+#~ ">>>>>>> 8bdf7b09f208346481cba5e08edc55dfab8c8d63\n"
|
|
|
+#~ msgstr ""
|
|
|
+#~ "Comme expliqué dans les [conseils de sécurité](01_Installation."
|
|
|
+#~ "md#conseils-de-securite), il est recommandé de faire pointer un nom de "
|
|
|
+#~ "domaine vers ce sous-répertoire afin que seule la partie publique ne soit "
|
|
|
+#~ "accessible par un navigateur web. De cette manière http://demo.freshrss."
|
|
|
+#~ "org/ pointe vers le répertoire ```./p``` et le ```robots.txt``` se trouve "
|
|
|
+#~ "bien à la racine du site : http://demo.freshrss.org/robots.txt."
|
|
|
+
|
|
|
+#~ msgid "Here's a list of feeds which don't work:"
|
|
|
+#~ msgstr "Voici une liste des flux qui ne fonctionnent pas :"
|
|
|
+
|
|
|
+#~ msgid ""
|
|
|
+#~ "http://foulab.org/fr/rss/Foulab_News: is not a W3C valid feed (November "
|
|
|
+#~ "2014)"
|
|
|
+#~ msgstr ""
|
|
|
+#~ "http://foulab.org/fr/rss/Foulab_News : ne passe pas la validation W3C "
|
|
|
+#~ "(novembre 2014)"
|
|
|
+
|
|
|
+#~ msgid ""
|
|
|
+#~ "http://eu.battle.net/hearthstone/fr/feed/news: is not a W3C valid feed "
|
|
|
+#~ "(November 2014)"
|
|
|
+#~ msgstr ""
|
|
|
+#~ "http://eu.battle.net/hearthstone/fr/feed/news : ne passe pas la "
|
|
|
+#~ "validation W3C (novembre 2014)"
|
|
|
+
|
|
|
+#~ msgid ""
|
|
|
+#~ "http://webseriesmag.blogs.liberation.fr/we/atom.xml: is not working for "
|
|
|
+#~ "the user but passes validation (November 2014)"
|
|
|
+#~ msgstr ""
|
|
|
+#~ "http://webseriesmag.blogs.liberation.fr/we/atom.xml : ne fonctionne pas "
|
|
|
+#~ "chez l'utilisateur mais passe l'ensemble des validations ci-dessus "
|
|
|
+#~ "(novembre 2014)"
|
|
|
+
|
|
|
+#~ msgid "Problem to solve"
|
|
|
+#~ msgstr "Problème à résoudre"
|
|
|
+
|
|
|
+#~ msgid "Préparer la sortie"
|
|
|
+#~ msgstr "Préparer la sortie"
|
|
|
+
|
|
|
+#~ msgid "S'assurer de l'état de dev"
|
|
|
+#~ msgstr "S'assurer de l'état de dev"
|
|
|
+
|
|
|
+#~ msgid ""
|
|
|
+#~ "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 "
|
|
|
+#~ "faudrait que nos tests soient automatisés et exécutés avant toute "
|
|
|
+#~ "publication."
|
|
|
+#~ msgstr ""
|
|
|
+#~ "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 "
|
|
|
+#~ "faudrait que nos tests soient automatisés et exécutés avant toute "
|
|
|
+#~ "publication."
|
|
|
+
|
|
|
+#~ msgid ""
|
|
|
+#~ "Il faut aussi **vous assurer que le fichier CHANGELOG est à jour** dans "
|
|
|
+#~ "la branche de dev avec les mises à jour de la ou les version(s) à sortir."
|
|
|
+#~ msgstr ""
|
|
|
+#~ "Il faut aussi **vous assurer que le fichier CHANGELOG est à jour** dans "
|
|
|
+#~ "la branche de dev avec les mises à jour de la ou les version(s) à sortir."
|
|
|
+
|
|
|
+#~ msgid "Processus Git"
|
|
|
+#~ msgstr "Processus Git"
|
|
|
+
|
|
|
+#~ msgid "Écriture du script de mise à jour"
|
|
|
+#~ msgstr "Écriture du script de mise à jour"
|
|
|
+
|
|
|
+#~ msgid "Il existe ensuite 5 fonctions à remplir :"
|
|
|
+#~ msgstr "Il existe ensuite 5 fonctions à remplir :"
|
|
|
+
|
|
|
+#~ msgid ""
|
|
|
+#~ "- `apply_update()` qui se charge de sauvegarder le répertoire contenant "
|
|
|
+#~ "les 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 survenu ou une chaîne de caractères indiquant un "
|
|
|
+#~ "soucis ; - `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 `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 "
|
|
|
+#~ "`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)."
|
|
|
+#~ msgstr ""
|
|
|
+#~ "- `apply_update()` qui se charge de sauvegarder le répertoire contenant "
|
|
|
+#~ "les 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 survenu ou une chaîne de caractères indiquant un "
|
|
|
+#~ "soucis ; - `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 `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 "
|
|
|
+#~ "`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)."
|
|
|
+
|
|
|
+#~ msgid "Mise à jour du fichier de versions"
|
|
|
+#~ msgstr "Mise à jour du fichier de versions"
|
|
|
+
|
|
|
+#~ msgid ""
|
|
|
+#~ "Lorsque le script a été écrit et versionné, il est nécessaire de mettre à "
|
|
|
+#~ "jour le fichier `./versions.php` qui contient une table de "
|
|
|
+#~ "correspondances indiquant quelles versions sont mises à jour vers quelles "
|
|
|
+#~ "autres versions."
|
|
|
+#~ msgstr ""
|
|
|
+#~ "Lorsque le script a été écrit et versionné, il est nécessaire de mettre à "
|
|
|
+#~ "jour le fichier `./versions.php` qui contient une table de "
|
|
|
+#~ "correspondances indiquant quelles versions sont mises à jour vers quelles "
|
|
|
+#~ "autres versions."
|
|
|
+
|
|
|
+#~ msgid "Et voici comment fonctionne cette table :"
|
|
|
+#~ msgstr "Et voici comment fonctionne cette table :"
|
|
|
+
|
|
|
+#~ msgid ""
|
|
|
+#~ "- à gauche se trouve la version N, à droite la version N+1 ; - les "
|
|
|
+#~ "versions `x.y.z-dev` sont **toutes** mises à jour vers `dev` ; - les "
|
|
|
+#~ "versions stables sont mises à jour vers des versions stables ; - 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 passera."
|
|
|
+#~ msgstr ""
|
|
|
+#~ "- à gauche se trouve la version N, à droite la version N+1 ; - les "
|
|
|
+#~ "versions `x.y.z-dev` sont **toutes** mises à jour vers `dev` ; - les "
|
|
|
+#~ "versions stables sont mises à jour vers des versions stables ; - 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 passera."
|
|
|
+
|
|
|
+#~ msgid ""
|
|
|
+#~ "Il est **très fortement** indiqué de garder ce fichier rangé selon les "
|
|
|
+#~ "numéros de versions en séparant les versions stables et de dev."
|
|
|
+#~ msgstr ""
|
|
|
+#~ "Il est **très fortement** indiqué de garder ce fichier rangé selon les "
|
|
|
+#~ "numéros de versions en séparant les versions stables et de dev."
|
|
|
+
|
|
|
+#~ msgid ""
|
|
|
+#~ "Lorsque vous serez satisfait, mettez à jour update.freshrss.org avec le "
|
|
|
+#~ "nouveau script et en testant de nouveau puis passez à la suite."
|
|
|
+#~ msgstr ""
|
|
|
+#~ "Lorsque vous serez satisfait, mettez à jour update.freshrss.org avec le "
|
|
|
+#~ "nouveau script et en testant de nouveau puis passez à la suite."
|
|
|
+
|
|
|
+#~ msgid "Mise à jour des services FreshRSS"
|
|
|
+#~ msgstr "Mise à jour des services FreshRSS"
|
|
|
+
|
|
|
+#~ msgid ""
|
|
|
+#~ "Deux services sont à mettre à jour immédiatement après la mise à jour de "
|
|
|
+#~ "update.freshrss.org :"
|
|
|
+#~ msgstr ""
|
|
|
+#~ "Deux services sont à mettre à jour immédiatement après la mise à jour de "
|
|
|
+#~ "update.freshrss.org :"
|
|
|
+
|
|
|
+#~ msgid "Annoncer publiquement la sortie"
|
|
|
+#~ msgstr "Annoncer publiquement la sortie"
|
|
|
+
|
|
|
+#~ msgid ""
|
|
|
+#~ "Lorsque tout fonctionne, il est temps d'annoncer la sortie au monde "
|
|
|
+#~ "entier !"
|
|
|
+#~ msgstr ""
|
|
|
+#~ "Lorsque tout fonctionne, il est temps d'annoncer la sortie au monde "
|
|
|
+#~ "entier !"
|
|
|
+
|
|
|
+#~ msgid ""
|
|
|
+#~ "- 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 [FreshRSS/freshrss.org]"
|
|
|
+#~ "(https://github.com/FreshRSS/freshrss.org)). - sur Twitter (compte "
|
|
|
+#~ "[@FreshRSS](https://twitter.com/FreshRSS)) ; - et sur mailing@freshrss."
|
|
|
+#~ "org ;"
|
|
|
+#~ msgstr ""
|
|
|
+#~ "- 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 [FreshRSS/freshrss.org]"
|
|
|
+#~ "(https://github.com/FreshRSS/freshrss.org)). - sur Twitter (compte "
|
|
|
+#~ "[@FreshRSS](https://twitter.com/FreshRSS)) ; - et sur mailing@freshrss."
|
|
|
+#~ "org ;"
|
|
|
+
|
|
|
+#~ msgid "Lancer la prochaine version de développement"
|
|
|
+#~ msgstr "Lancer la prochaine version de développement"
|
|
|
+
|
|
|
+#~ msgid ""
|
|
|
+#~ "Pensez aussi à mettre à jour update.freshrss.org pour qu'il prenne en "
|
|
|
+#~ "compte la version de développement actuelle."
|
|
|
+#~ msgstr ""
|
|
|
+#~ "Pensez aussi à mettre à jour update.freshrss.org pour qu'il prenne en "
|
|
|
+#~ "compte la version de développement actuelle."
|
|
|
+
|
|
|
+#~ msgid "With brackets"
|
|
|
+#~ msgstr "Le cas des parenthèses"
|
|
|
+
|
|
|
+#~ msgid ""
|
|
|
+#~ "- RSS and Atom aggregation - Mark article as favorite if you liked it or "
|
|
|
+#~ "if you want to read it later - Filter and search functionality helps to "
|
|
|
+#~ "easily find articles - Statistics to show you the publishing frequency "
|
|
|
+#~ "all the websites you follow - Import/export of your feeds into OPML "
|
|
|
+#~ "format - Several themes created by the community - \"Google Reader\"-like "
|
|
|
+#~ "API to connect Android applications - The application is \"responsive,\" "
|
|
|
+#~ "which means it adapts to small screens so you can bring articles in your "
|
|
|
+#~ "pocket - Self-hosted: the code is free (under AGPL3 licence), so you can "
|
|
|
+#~ "host your own instance of FreshRSS - Multi-user, so you can also host for "
|
|
|
+#~ "your friends and family - And a lot more!"
|
|
|
+#~ msgstr ""
|
|
|
+#~ "- Agrégation des flux RSS et Atom.- Utilisez les favoris pour marquer les "
|
|
|
+#~ "articles qui vous ont plu ou que vous souhaitez lire plus tard.- Le "
|
|
|
+#~ "système de filtrage et de recherche permettent de cibler exactement les "
|
|
|
+#~ "articles que vous souhaitez lire.- Les statistiques permettent de savoir "
|
|
|
+#~ "en un coup d’œil quels sont les sites qui publient le plus, ou à "
|
|
|
+#~ "l’inverse, le moins.- Importation / exportation des flux au format OPML.- "
|
|
|
+#~ "Multi-thèmes pour changer l’habillage de FreshRSS.- « *Responsive design* "
|
|
|
+#~ "» : l’application s’adapte aux petits écrans pour emporter FreshRSS dans "
|
|
|
+#~ "votre poche.- Multi-utilisateurs pour héberger plusieurs personnes sur "
|
|
|
+#~ "une même installation.- API Google Reader pour pouvoir y brancher des "
|
|
|
+#~ "applications Android.- Auto-hébergeable : le code source est libre "
|
|
|
+#~ "(AGPL3) et vous pouvez donc l’héberger sur votre propre serveur.- Et bien "
|
|
|
+#~ "d’autres !"
|