diff --git a/app/Config/App.php b/app/Config/App.php
index 5dd608b357430f05152a5310dee629129d784cf7..c81f2d891a028d9a811ddb443716cbb3f8c72cd4 100644
--- a/app/Config/App.php
+++ b/app/Config/App.php
@@ -89,7 +89,7 @@ class App extends BaseConfig
     | found, the first locale will be used.
     |
     */
-    public $supportedLocales = ['en'];
+    public $supportedLocales = ['en', 'fr'];
 
     /*
     |--------------------------------------------------------------------------
diff --git a/app/Language/en/Install.php b/app/Language/en/Install.php
index 10ae23a3bb19afcbef4e16c8bcf032e2917cae61..131fc20691f52409a585eb17816889ad6520f2de 100644
--- a/app/Language/en/Install.php
+++ b/app/Language/en/Install.php
@@ -44,7 +44,6 @@ return [
         'email' => 'Email',
         'username' => 'Username',
         'password' => 'Password',
-        'submit_create_superadmin' => 'Create superadmin!',
     ],
     'messages' => [
         'createSuperAdminSuccess' =>
diff --git a/app/Language/en/PodcastImport.php b/app/Language/en/PodcastImport.php
index ddd762b25efe7ec3a9bbed78c4b932323aa56dfb..d914557a9b5b6fa9686fe9788c92900565909de2 100644
--- a/app/Language/en/PodcastImport.php
+++ b/app/Language/en/PodcastImport.php
@@ -13,7 +13,7 @@ return [
     'old_podcast_section_subtitle' =>
         'Make sure you own the rights for this podcast before importing it. Copying and broadcasting a podcast without the proper rights is piracy and is liable to prosecution.',
     'imported_feed_url' => 'Feed URL',
-    'imported_feed_url_hint' => 'The feed must be in `.xml` format.',
+    'imported_feed_url_hint' => 'The feed must be in xml or rss format.',
     'new_podcast_section_title' => 'The new podcast',
     'name' => 'Name',
     'name_hint' => 'Used for generating the podcast URL.',
diff --git a/app/Language/fr/Admin.php b/app/Language/fr/Admin.php
new file mode 100644
index 0000000000000000000000000000000000000000..4a54b1bc2236e72a64eac62751109219574de665
--- /dev/null
+++ b/app/Language/fr/Admin.php
@@ -0,0 +1,12 @@
+<?php
+
+/**
+ * @copyright  2020 Podlibre
+ * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
+ * @link       https://castopod.org/
+ */
+
+return [
+    'dashboard' => 'Tableau de bord',
+    'welcome_message' => 'Bienvenue dans l’administration !',
+];
diff --git a/app/Language/fr/AdminNavigation.php b/app/Language/fr/AdminNavigation.php
new file mode 100644
index 0000000000000000000000000000000000000000..ea79018dd7a600a01332e187ecfea88ffb30d8ab
--- /dev/null
+++ b/app/Language/fr/AdminNavigation.php
@@ -0,0 +1,28 @@
+<?php
+
+/**
+ * @copyright  2020 Podlibre
+ * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
+ * @link       https://castopod.org/
+ */
+
+return [
+    'go_to_website' => 'Visiter le site',
+    'dashboard' => 'Tableau de bord',
+    'admin' => 'Accueil',
+    'podcasts' => 'Podcasts',
+    'podcast-list' => 'Tous les podcasts',
+    'podcast-create' => 'Créer un podcast',
+    'podcast-import' => 'Importer un podcast',
+    'users' => 'Utilisateurs',
+    'user-list' => 'Tous les utilisateurs',
+    'user-create' => 'Créer un utilisateur',
+    'pages' => 'Pages',
+    'page-list' => 'Toutes les pages',
+    'page-create' => 'Créer une page',
+    'account' => [
+        'my-account' => 'Mon compte',
+        'change-password' => 'Modifier le mot de passe',
+        'logout' => 'Déconnexion',
+    ],
+];
diff --git a/app/Language/fr/Breadcrumb.php b/app/Language/fr/Breadcrumb.php
new file mode 100644
index 0000000000000000000000000000000000000000..75672e4e5437c6be370d7dea503faea69969f09d
--- /dev/null
+++ b/app/Language/fr/Breadcrumb.php
@@ -0,0 +1,30 @@
+<?php
+
+/**
+ * @copyright  2020 Podlibre
+ * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
+ * @link       https://castopod.org/
+ */
+
+return [
+    'label' => 'Fil d’Ariane',
+    config('App')->adminGateway => 'Accueil',
+    'podcasts' => 'podcasts',
+    'episodes' => 'épisodes',
+    'contributors' => 'contributeurs',
+    'pages' => 'pages',
+    'add' => 'ajouter',
+    'new' => 'créer',
+    'edit' => 'modifier',
+    'users' => 'utilisateurs',
+    'my-account' => 'mon compte',
+    'change-password' => 'changer le mot de passe',
+    'import' => 'importer un flux',
+    'settings' => 'paramètres',
+    'platforms' => 'plateformes',
+    'analytics' => 'Mesures d’audience',
+    'locations' => 'Localisations',
+    'website' => 'Site web',
+    'unique-listeners' => 'Auditeurs uniques',
+    'players' => 'Lecteurs',
+];
diff --git a/app/Language/fr/Charts.php b/app/Language/fr/Charts.php
new file mode 100644
index 0000000000000000000000000000000000000000..8aabc24724508f202bebb5af1aef4af10778cb17
--- /dev/null
+++ b/app/Language/fr/Charts.php
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * @copyright  2020 Podlibre
+ * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
+ * @link       https://castopod.org/
+ */
+
+return [
+    'by_player_weekly' =>
+        'Téléchargements de Podcast par lecteur (sur la dernière semaine)',
+    'by_player_yearly' =>
+        'Téléchargements de Podcast par lecteur (sur la dernière année)',
+    'by_device_weekly' =>
+        'Téléchargements de Podcast par appareil (sur la dernière semaine)',
+    'by_os_weekly' =>
+        'Téléchargements de Podcast par OS (sur la dernière semaine)',
+    'podcast_by_region' =>
+        'Téléchargements de Podcast par région (sur la dernière semaine)',
+    'unique_daily_listeners' => 'Auditeurs uniques quotidiens',
+    'unique_monthly_listeners' => 'Auditeurs uniques mensuels',
+    'by_browser' =>
+        'Fréquentation du site par navigateur (sur la dernière semaine)',
+    'podcast_by_day' => 'Téléchargements quotidiens de podcasts',
+    'podcast_by_month' => 'Téléchargements mensuels de podcasts',
+    'episode_by_day' =>
+        'Téléchargements quotidiens de l’épisode (sur les 60 premiers jours)',
+    'episode_by_month' => 'Téléchargements mensuels de l’épisode',
+    'episodes_by_day' =>
+        'Téléchargements des 5 derniers épisodes (sur les 60 premiers jours)',
+    'by_country_weekly' =>
+        'Téléchargement de podcasts par pays (sur la dernière semaine)',
+    'by_country_yearly' =>
+        'Téléchargement de podcasts par pays (sur la dernière année)',
+    'by_domain_weekly' =>
+        'Fréquentation du site par origine (sur la dernière semaine)',
+    'by_domain_yearly' =>
+        'Fréquentation du site par origine (sur la dernière année)',
+    'by_entry_page' =>
+        'Fréquentation du site par page d’entrée (sur la dernière semaine)',
+    'podcast_bots' => 'Robots (bots)',
+];
diff --git a/app/Language/fr/Common.php b/app/Language/fr/Common.php
new file mode 100644
index 0000000000000000000000000000000000000000..0bef7680c41db232101d21c54dedfc2bc4b18f68
--- /dev/null
+++ b/app/Language/fr/Common.php
@@ -0,0 +1,32 @@
+<?php
+
+/**
+ * @copyright  2020 Podlibre
+ * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
+ * @link       https://castopod.org/
+ */
+
+return [
+    'yes' => 'Oui',
+    'no' => 'Non',
+    'optional' => 'Optionnel',
+    'no_data' => 'Aucune donnée trouvée !',
+    'home' => 'Accueil',
+    'explicit' => 'Explicite',
+    'mediumDate' => '{0,date,medium}',
+    'duration' => '{0,duration}',
+    'powered_by' => 'Propulsé par {castopod}.',
+    'actions' => 'Actions',
+    'pageInfo' => 'Page {currentPage} sur {pageCount}',
+    'forms' => [
+        'multiSelect' => [
+            'selectText' => 'Cliquez pour selectionner',
+            'loadingText' => 'Chargement...',
+            'noResultsText' => 'Aucun résultat trouvé',
+            'noChoicesText' => 'Aucune sélection possible',
+            'maxItemText' => 'Impossible de rajouter un élément',
+        ],
+        'image_size_hint' =>
+            'L’image doit être carrée, avec au minimum 1400px de long et de large.',
+    ],
+];
diff --git a/app/Language/fr/Contributor.php b/app/Language/fr/Contributor.php
new file mode 100644
index 0000000000000000000000000000000000000000..66728696dda418263e977489b11d11c86127b091
--- /dev/null
+++ b/app/Language/fr/Contributor.php
@@ -0,0 +1,38 @@
+<?php
+
+/**
+ * @copyright  2020 Podlibre
+ * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
+ * @link       https://castopod.org/
+ */
+
+return [
+    'podcast_contributors' => 'Contributeurs du podcast',
+    'view' => 'Contribution de {username} à {podcastName}',
+    'add' => 'Ajouter un contributeur',
+    'add_contributor' => 'Ajouter un contributeur pour {0}',
+    'edit_role' => 'Modifier le rôle de {0}',
+    'edit' => 'Modifier',
+    'remove' => 'Supprimer',
+    'list' => [
+        'username' => 'Identifiant',
+        'role' => 'Rôle',
+    ],
+    'form' => [
+        'user' => 'Identifiant',
+        'role' => 'Rôle',
+        'submit_add' => 'Ajouter le contributeur',
+        'submit_edit' => 'Mettre à jour le rôle',
+    ],
+    'roles' => [
+        'podcast_admin' => 'Administrateur de Podcasts',
+    ],
+    'messages' => [
+        'removeOwnerContributorError' =>
+            'Vous ne pouvez pas retirer le propriétaire du podcast !',
+        'removeContributorSuccess' =>
+            'Vous avez retiré {username} de {podcastTitle}',
+        'alreadyAddedError' =>
+            'Le contributeur que vous essayez d’ajouter est déjà présent.',
+    ],
+];
diff --git a/app/Language/fr/Episode.php b/app/Language/fr/Episode.php
new file mode 100644
index 0000000000000000000000000000000000000000..71d603741f51f64f3c8a323b34ed69d962197dca
--- /dev/null
+++ b/app/Language/fr/Episode.php
@@ -0,0 +1,74 @@
+<?php
+
+/**
+ * @copyright  2020 Podlibre
+ * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
+ * @link       https://castopod.org/
+ */
+
+return [
+    'previous_episode' => 'Épisode précédent',
+    'previous_season' => 'Saison précédente',
+    'next_episode' => 'Épisode suivant',
+    'next_season' => 'Saison suivante',
+    'season' => 'Saison {seasonNumber}',
+    'number' => 'Épisode {episodeNumber}',
+    'number_abbr' => 'Ep. {episodeNumber}',
+    'season_episode' => 'Saison {seasonNumber} épisode {episodeNumber}',
+    'season_episode_abbr' => 'S{seasonNumber}E{episodeNumber}',
+    'all_podcast_episodes' => 'Tous les épisodes du podcast',
+    'back_to_podcast' => 'Revenir au podcast',
+    'edit' => 'Modifier',
+    'delete' => 'Supprimer',
+    'go_to_page' => 'Voir',
+    'create' => 'Ajouter un épisode',
+    'form' => [
+        'enclosure' => 'Sélectionnez un fichier audio .mp3 ou .m4a…',
+        'info_section_title' => 'Informations épisode',
+        'info_section_subtitle' => '',
+        'image' => 'Image de couverture',
+        'image_hint' =>
+            'Si vous ne définissez pas d’image, celle du podcast sera utilisée à la place.',
+        'title' => 'Titre',
+        'title_hint' =>
+            'Doit contenir un titre d’épisode clair et concis. Ne précisez ici aucun numéro de saison ou d’épisode.',
+        'slug' => 'Identifiant',
+        'slug_hint' => 'Utilisé pour générer l’adresse de l’épisode.',
+        'season_number' => 'Saison',
+        'episode_number' => 'Épisode',
+        'type' => [
+            'label' => 'Type',
+            'hint' =>
+                '- <strong>complet</strong>: épisode complet.<br/>- <strong>bande-annonce</strong>: extrait court, promotionnel du podcast.<br/>- <strong>bonus</strong> :  contenu supplémentaire pour le podcast (par exemple des informations sur les coulisses ou des interviews avec les acteurs) ou du contenu promotionnel croisé pour un autre podcast.',
+            'full' => 'Complet',
+            'trailer' => 'Bande-annonce',
+            'bonus' => 'Bonus',
+        ],
+        'show_notes_section_title' => 'Notes d’épisode (Show Notes)',
+        'show_notes_section_subtitle' =>
+            'Jusque 4000 caractères, soyez clairs et concis. Les notes d’épisode aident les auditeurs potentiels à le trouver.',
+        'description' => 'Description',
+        'description_footer' => 'Pied de description',
+        'description_footer_hint' =>
+            'Ce texte est ajouté à la fin de chaque description d’épisode, c’est un bon endroit pour placer vos liens sociaux par exemple.',
+        'publication_section_title' => 'Information de publication',
+        'publication_section_subtitle' => '',
+        'published_at' => [
+            'label' => 'Date de publication',
+            'date' => 'Date',
+            'time' => 'Heure',
+        ],
+        'parental_advisory' => [
+            'label' => 'Avertissement parental',
+            'hint' => 'L’épisode contient-il un contenu explicite ?',
+            'undefined' => 'non défini',
+            'clean' => 'Convenable',
+            'explicit' => 'Explicite',
+        ],
+        'block' => 'L’épisode doit être masqué de toutes les plateformes',
+        'block_hint' =>
+            'La visibilité de l’épisode. Si vous souhaitez retirer cet épisode de l’index Apple, activez ce champs.',
+        'submit_create' => 'Créer l’épisode',
+        'submit_edit' => 'Enregistrer l’épisode',
+    ],
+];
diff --git a/app/Language/fr/Home.php b/app/Language/fr/Home.php
new file mode 100644
index 0000000000000000000000000000000000000000..b8b7c4911a0ede03a90e82642c37af907347691f
--- /dev/null
+++ b/app/Language/fr/Home.php
@@ -0,0 +1,12 @@
+<?php
+
+/**
+ * @copyright  2020 Podlibre
+ * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
+ * @link       https://castopod.org/
+ */
+
+return [
+    'all_podcasts' => 'Tous les podcasts',
+    'no_podcast' => 'Aucun podcast trouvé',
+];
diff --git a/app/Language/fr/Install.php b/app/Language/fr/Install.php
new file mode 100644
index 0000000000000000000000000000000000000000..dfff116fa9277cfc8f19bd3d4ad97fffa9a536df
--- /dev/null
+++ b/app/Language/fr/Install.php
@@ -0,0 +1,56 @@
+<?php
+
+/**
+ * @copyright  2020 Podlibre
+ * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
+ * @link       https://castopod.org/
+ */
+
+return [
+    'manual_config' => 'Configuration manuelle',
+    'manual_config_subtitle' =>
+        'Créez un fichier `.env` qui contient tous vos paramètres puis rafraichissez la page pour continuer l’installation.',
+    'form' => [
+        'instance_config' => 'Paramètres de l’instance',
+        'hostname' => 'Nom d’hôte',
+        'admin_gateway' => 'Adresse d’administration',
+        'admin_gateway_hint' =>
+            'Le chemin pour accéder à l’administration (par exemple https://example.com/cp-admin). Il est défini par défaut à cp-admin, nous vous recommandons de le changer par mesure de sécurité.',
+        'auth_gateway' => 'Adresse d’authentification',
+        'auth_gateway_hint' =>
+            'Le chemin des pages d’authentication (par exemple https://example.fr/cp-auth). Il est défini par défaut à cp-auth, nous vous recommandons de le changer par mesure de sécurité.',
+        'database_config' => 'Paramètres de base de données',
+        'database_config_hint' =>
+            'Castopod doit se connecter à votre base de données MySQL (ou MariaDB). Si vous ne disposez pas de ces informations, merci de contacter l’administrateur du serveur.',
+        'db_hostname' => 'Nom d’hôte (ou IP) de la base de données',
+        'db_name' => 'Nom de la base de données',
+        'db_username' => 'Utilisateur de base de données',
+        'db_password' => 'Mot de passe de base de données',
+        'db_prefix' => 'Préfixe des tables',
+        'db_prefix_hint' =>
+            'Le préfixe des noms de tables de Castopod, laissez la valeur par défaut si vous ne savez pas de quoi il s’agit.',
+        'cache_config' => 'Paramètres de cache',
+        'cache_config_hint' =>
+            'Sélectionnez votre gestionnaire de cache préféré. Laissez la valeur par défaut si vous ne savez pas de quoi il s’agit.',
+        'cache_handler' => 'Gestionnaire de cache',
+        'cacheHandlerOptions' => [
+            'file' => 'Fichiers',
+            'redis' => 'Redis',
+            'memcached' => 'Memcached',
+        ],
+        'next' => 'Suivant',
+        'submit' => 'Terminer l’installation',
+        'create_superadmin' => 'Créer un compte super-utilisateur',
+        'email' => 'E-mail',
+        'username' => 'Identifiant',
+        'password' => 'Mot de passe',
+    ],
+    'messages' => [
+        'createSuperAdminSuccess' =>
+            'Le compte super-utilisateur a bien été créé. Connectez-vous et commencez à podcaster !',
+        'databaseConnectError' =>
+            'Castopod n’a pas pu se connecter à la base de données. Modifier les paramètres de base de données et essayer à nouveau.',
+        'writeError' =>
+            'Impossible de créer/écrire le fichier `.env`. Créez manuellement un fichier `.env` en copiant le modèle `.env.example` fourni avec Castopod.',
+    ],
+];
diff --git a/app/Language/fr/MyAccount.php b/app/Language/fr/MyAccount.php
new file mode 100644
index 0000000000000000000000000000000000000000..5a2181f28dceaf7ef1ddea7080b63b703b42877a
--- /dev/null
+++ b/app/Language/fr/MyAccount.php
@@ -0,0 +1,17 @@
+<?php
+
+/**
+ * @copyright  2020 Podlibre
+ * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
+ * @link       https://castopod.org/
+ */
+
+return [
+    'info' => 'Informations de mon compte',
+    'changePassword' => 'Modifier mon mot de passe',
+    'messages' => [
+        'wrongPasswordError' =>
+            'Le mot de passe que vous avez saisi est invalide.',
+        'passwordChangeSuccess' => 'Le mot de passe a été modifié avec succès !',
+    ],
+];
diff --git a/app/Language/fr/Page.php b/app/Language/fr/Page.php
new file mode 100644
index 0000000000000000000000000000000000000000..adc10995cb6620861306c705ffcc234a615c0b16
--- /dev/null
+++ b/app/Language/fr/Page.php
@@ -0,0 +1,26 @@
+<?php
+
+/**
+ * @copyright  2020 Podlibre
+ * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
+ * @link       https://castopod.org/
+ */
+
+return [
+    'page' => 'Page',
+    'all_pages' => 'Toutes les pages',
+    'create' => 'Créer une page',
+    'go_to_page' => 'Aller à la page',
+    'edit' => 'Modifier la page',
+    'delete' => 'Supprimer la page',
+    'form' => [
+        'title' => 'Titre',
+        'slug' => 'Identifiant',
+        'content' => 'Contenu',
+        'submit_create' => 'Créer la page',
+        'submit_edit' => 'Enregistrer',
+    ],
+    'messages' => [
+        'createSuccess' => 'La page {pageTitle} a été créée avec succès !',
+    ],
+];
diff --git a/app/Language/fr/Pager.php b/app/Language/fr/Pager.php
new file mode 100644
index 0000000000000000000000000000000000000000..181a18e30fd8b9eae06a00ccc7a9e7eeea962574
--- /dev/null
+++ b/app/Language/fr/Pager.php
@@ -0,0 +1,19 @@
+<?php
+
+/**
+ * @copyright  2020 Podlibre
+ * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
+ * @link       https://castopod.org/
+ */
+
+return [
+    'pageNavigation' => 'Navigation',
+    'first' => 'Première',
+    'previous' => 'Précédent',
+    'next' => 'Suivant',
+    'last' => 'Dernière',
+    'older' => 'Plus ancien',
+    'newer' => 'Plus récent',
+    'invalidTemplate' => '{0} n’est pas un modèle valide.',
+    'invalidPaginationGroup' => '{0} n’est pas un groupe valide.',
+];
diff --git a/app/Language/fr/Platforms.php b/app/Language/fr/Platforms.php
new file mode 100644
index 0000000000000000000000000000000000000000..3895de2d585cd190ff0edd83d8b80f785ad65ae6
--- /dev/null
+++ b/app/Language/fr/Platforms.php
@@ -0,0 +1,22 @@
+<?php
+
+/**
+ * @copyright  2020 Podlibre
+ * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
+ * @link       https://castopod.org/
+ */
+
+return [
+    'title' => 'Plateformes',
+    'home_url' => 'Aller au site {platformName}',
+    'submit_url' => 'Soumettez votre podcast sur {platformName}',
+    'visible' => 'Afficher sur la page d’accueil du podcast ?',
+    'remove' => 'Supprimer {platformName}',
+    'submit' => 'Enregistrer',
+    'messages' => [
+        'updateSuccess' => 'Les liens ont été enregistrés avec succès !',
+        'removeLinkSuccess' => 'Le lien a été supprimé.',
+        'removeLinkError' =>
+            'Le lien n’a pas pu être supprimé. Merci d’essayer à nouveau.',
+    ],
+];
diff --git a/app/Language/fr/Podcast.php b/app/Language/fr/Podcast.php
new file mode 100644
index 0000000000000000000000000000000000000000..0452bbc6d1ad62ab01126c150ec5c83c461071f7
--- /dev/null
+++ b/app/Language/fr/Podcast.php
@@ -0,0 +1,192 @@
+<?php
+
+/**
+ * @copyright  2020 Podlibre
+ * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
+ * @link       https://castopod.org/
+ */
+
+return [
+    'all_podcasts' => 'Tous les podcasts',
+    'no_podcast' => 'Aucun podcast trouvé !',
+    'create' => 'Créer un podcast',
+    'import' => 'Importer un podcast',
+    'new_episode' => 'Créer un épisode',
+    'feed' => 'RSS',
+    'view' => 'Voir le podcast',
+    'edit' => 'Modifier le podcast',
+    'delete' => 'Supprimer le podcast',
+    'see_episodes' => 'Voir les épisodes',
+    'see_contributors' => 'Voir les contributeurs',
+    'go_to_page' => 'Aller à la page',
+    'latest_episodes' => 'Derniers épisodes',
+    'see_all_episodes' => 'Voir tous les épisodes',
+    'form' => [
+        'identity_section_title' => 'Informations sur le Podcast',
+        'identity_section_subtitle' =>
+            'Ces champs vous permettent de vous faire remarquer.',
+        'image' => 'Image de couverture',
+        'title' => 'Titre',
+        'name' => 'Nom',
+        'name_hint' => 'Utilisé pour l’adresse du podcast.',
+        'type' => [
+            'label' => 'Type',
+            'hint' =>
+                '- <strong>épisodique</strong> : si les épisodes sont destinés à être consommés sans ordre spécifique. Les épisodes les plus récents seront présentés en premier.<br/>- <strong>série</strong>: si les épisodes sont destinés à être consommés dans un ordre séquentiel bien défini. Les épisodes les plus anciens seront présentés en premier.',
+            'episodic' => 'Épisodique',
+            'serial' => 'Série',
+        ],
+        'description' => 'Description',
+        'classification_section_title' => 'Classification',
+        'classification_section_subtitle' =>
+            'Ces champs auront un impact sur votre audience et votre concurrence.',
+        'language' => 'Langue',
+        'category' => 'Catégorie',
+        'other_categories' => 'Autres catégories',
+        'parental_advisory' => [
+            'label' => 'Avertissement parental',
+            'hint' => 'Contient-il un contenu explicite ?',
+            'undefined' => 'non défini',
+            'clean' => 'Convenable',
+            'explicit' => 'Explicite',
+        ],
+        'author_section_title' => 'Auteur / Autrice',
+        'author_section_subtitle' => 'Qui gère le podcast ?',
+        'owner_name' => 'Nom du/de la propriétaire',
+        'owner_name_hint' =>
+            'Pour usage administratif uniquement. Visible dans le flux RSS public.',
+        'owner_email' => 'E-mail du/de la propriétaire',
+        'owner_email_hint' =>
+            'Utilisé par la plupart des plateformes pour vérifier la propriété du podcast. Visible dans le flux RSS public.',
+        'publisher' => 'Éditeur / Éditrice',
+        'publisher_hint' =>
+            'Le groupe responsable de la création du podcast. Fait souvent référence à la société mère ou au réseau d’un podcast. Ce champ est parfois appelé « Auteur ».',
+        'copyright' => 'Droit d’auteur',
+        'status_section_title' => 'Statut',
+        'status_section_subtitle' => 'Vivant ou mort ?',
+        'block' => 'Le podcast doit être masqué sur toutes les plateformes',
+        'complete' => 'Le podcast n’aura plus de nouveaux épisodes.',
+        'submit_create' => 'Créer le podcast',
+        'submit_edit' => 'Enregistrer le podcast',
+    ],
+    'category_options' => [
+        'uncategorized' => 'non catégorisé',
+        'arts' => 'Arts',
+        'business' => 'Entreprise',
+        'comedy' => 'Comédie',
+        'education' => 'Éducation',
+        'fiction' => 'Fiction',
+        'government' => 'Gouvernement',
+        'health_and_fitness' => 'Santé et remise en forme',
+        'history' => 'Histoire',
+        'kids_and_family' => 'Enfants et famille',
+        'Leisure' => 'Loisirs',
+        'music' => 'Musique',
+        'news' => 'Actualités',
+        'religion_and_spirituality' => 'Religion et spiritualité',
+        'science' => 'Science',
+        'society_and_culture' => 'Société et Culture',
+        'sports' => 'Sports',
+        'technology' => 'Technologie',
+        'true_crime' => 'Documentaire criminel',
+        'tv_and_film' => 'Télévision et films',
+        'books' => 'Livres',
+        'design' => 'Design',
+        'fashion_and_beauty' => 'Mode et beauté',
+        'food' => 'Nourriture',
+        'performing_arts' => 'Arts du spectacle',
+        'visual_arts' => 'Arts visuels',
+        'careers' => 'Carrières',
+        'entrepreneurship' => 'Entrepreneuriat',
+        'investment' => 'Investissement',
+        'management' => 'Gestion',
+        'marketing' => 'Marketing',
+        'non_profit' => 'À but non lucratif',
+        'comedy_interviews' => 'Entretiens comiques',
+        'improv' => 'Improvisation',
+        'stand_up' => 'Stand up',
+        'courses' => 'Cours',
+        'how_to' => 'Tutoriels',
+        'language_learning' => 'Apprentissage des langues',
+        'self_improvement' => 'Développement personnel',
+        'comedy_fiction' => 'Comédie Fiction',
+        'drama' => 'Drame',
+        'science_fiction' => 'Science Fiction',
+        'alternative_health' => 'Santé alternative',
+        'fitness' => 'Remise en forme',
+        'medicine' => 'Médecine',
+        'mental_health' => 'Santé mentale',
+        'nutrition' => 'Nutrition',
+        'sexuality' => 'Sexualité',
+        'education_for_kids' => 'Éducation pour les enfants',
+        'parenting' => 'Parentalité',
+        'pets_and_animals' => 'Animaux de compagnie et animaux',
+        'stories_for_kids' => 'Histoires pour enfants',
+        'animation_and_manga' => 'Animation et Manga',
+        'Automotive' => 'Automobile',
+        'aviation' => 'Aviation',
+        'craft' => 'Artisanat',
+        'games' => 'Jeux',
+        'hobbies' => 'Loisirs',
+        'home_and_garden' => 'Maison et jardin',
+        'video_games' => 'Jeux vidéo',
+        'music_commentary' => 'Commentaire musical',
+        'music_history' => 'Histoire de la musique',
+        'music_interviews' => 'Entretiens musicaux',
+        'business_news' => 'Actualités économiques',
+        'daily_news' => 'Actualités quotidiennes',
+        'entertainment_news' => 'Actualités du divertissement',
+        'news_commentary' => 'Commentaire d’actualité',
+        'politique' => 'Politique',
+        'sports_news' => 'Actualités sportives',
+        'tech_news' => 'Actualités techniques',
+        'buddhism' => 'Bouddhisme',
+        'christianity' => 'Christianisme',
+        'hinduism' => 'Hindouisme',
+        'islam' => 'Islam',
+        'judaism' => 'Judaïsme',
+        'religion' => 'Religion',
+        'spiritualité' => 'Spiritualité',
+        'astronomy' => 'Astronomie',
+        'chemistry' => 'Chimie',
+        'earth_sciences' => 'Sciences de la Terre',
+        'life_sciences' => 'Sciences de la vie',
+        'Mathématiques' => 'Mathématiques',
+        'natural_sciences' => 'Sciences naturelles',
+        'nature' => 'Nature',
+        'physics' => 'Physique',
+        'social_sciences' => 'Sciences sociales',
+        'documentary' => 'Documentaire',
+        'personal_journals' => 'Journaux personnels',
+        'philosophie' => 'Philosophie',
+        'places_and_travel' => 'Lieux et voyages',
+        'relations' => 'Relations',
+        'baseball' => 'Baseball',
+        'basketball' => 'Basketball',
+        'cricket' => 'Cricket',
+        'fantasy_sports' => 'Sports fantastiques',
+        'football' => 'Football',
+        'golf' => 'Golf',
+        'hockey' => 'Hockey',
+        'rugby' => 'Rugby',
+        'running' => 'Course',
+        'soccer' => 'Football',
+        'swimming' => 'Natation',
+        'tennis' => 'Tennis',
+        'volleyball' => 'Volleyball',
+        'wilderness' => 'Naturalité',
+        'wrestling' => 'Lutte',
+        'after_shows' => 'Après spectacle',
+        'film_history' => 'Histoire du cinéma',
+        'film_interviews' => 'Entretiens de films',
+        'film_reviews' => 'Critiques de films',
+        'tv_reviews' => 'Critiques TV',
+    ],
+    'by' => 'Par {publisher}',
+    'season' => 'Saison {seasonNumber}',
+    'list_of_episodes_year' => 'épisodes {year}',
+    'list_of_episodes_season' => 'Épisodes de la saison {seasonNumber}',
+    'no_episode' => 'Aucun épisode trouvé !',
+    'no_episode_hint' =>
+        'Naviguez au sein des épisodes du podcast episodes grâce à la barre de navigation ci-dessus.',
+];
diff --git a/app/Language/fr/PodcastImport.php b/app/Language/fr/PodcastImport.php
new file mode 100644
index 0000000000000000000000000000000000000000..c7d03e0c663212ab1517587abe3256f6c59d3aa9
--- /dev/null
+++ b/app/Language/fr/PodcastImport.php
@@ -0,0 +1,45 @@
+<?php
+
+/**
+ * @copyright  2020 Podlibre
+ * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
+ * @link       https://castopod.org/
+ */
+
+return [
+    'warning' =>
+        'Cette procédure peut prendre du temps.<br/>Dans la mesure où la version actuelle ne montre aucune progression durant l’exécution, vous ne pourrez voir aucun changement avant la fin.<br/>En cas d’erreur de timeout,  augmentez la valeur de `max_execution_time`.',
+    'old_podcast_section_title' => 'Le podcast à importer',
+    'old_podcast_section_subtitle' =>
+        'Assurez-vous d’être détenteur des droits du podcast avant de l’importer. Copier et diffuser un podcast sans en détenir les droits est assimilable à de la contrefaçon et est passible de poursuites.',
+    'imported_feed_url' => 'Adresse du flux',
+    'imported_feed_url_hint' => 'Le flux doit être au format xml ou rss.',
+    'new_podcast_section_title' => 'Le nouveau podcast',
+    'name' => 'Nom',
+    'name_hint' => 'Utilisé pour l’adresse du podcast.',
+    'advanced_params_section_title' => 'Paramètres avancés',
+    'advanced_params_section_subtitle' =>
+        'Si vous ne savez pas à quoi servent ces champs, conservez les valeurs par défaut.',
+    'slug_field' => [
+        'label' =>
+            'Quel champ utiliser pour calculer l’identifiant de l’épisode',
+        'link' => '&lt;link&gt; (adresse)',
+        'title' => '&lt;title&gt; (titre)',
+    ],
+    'description_field' => [
+        'label' => 'Champs pour la description des épisodes',
+        'description' => '&lt;description&gt;',
+        'summary' => '&lt;itunes:summary&gt;',
+        'subtitle_summary' =>
+            '&lt;itunes:subtitle&gt; + &lt;itunes:summary&gt;',
+    ],
+    'force_renumber' => 'Forcer la re-numérotation des épisodes',
+    'force_renumber_hint' =>
+        'Utilisez ceci si le podcast à importer ne contient pas de numéros d’épisodes mais que vous souhaitez en ajouter pendant l’import.',
+    'season_number' => 'Numéro de saison',
+    'season_number_hint' =>
+        'Utilisez ceci si le podcast à importer ne contient pas de numéros de saison mais que vous souhaitez en définir un. Laissez vide sinon.',
+    'max_episodes' => 'Nombre maximum d’épisodes à importer',
+    'max_episodes_hint' => 'Laissez vide pour importer tous les épisodes',
+    'submit' => 'Importer le podcast',
+];
diff --git a/app/Language/fr/PodcastNavigation.php b/app/Language/fr/PodcastNavigation.php
new file mode 100644
index 0000000000000000000000000000000000000000..7645be0d006b3764b1d50d32fc3c44f38d4381c3
--- /dev/null
+++ b/app/Language/fr/PodcastNavigation.php
@@ -0,0 +1,28 @@
+<?php
+
+/**
+ * @copyright  2020 Podlibre
+ * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
+ * @link       https://castopod.org/
+ */
+
+return [
+    'go_to_page' => 'Aller à la page du podcast',
+    'dashboard' => 'Tableau de bord du podcast',
+    'podcast-view' => 'Accueil',
+    'podcast-edit' => 'Modifier le podcast',
+    'episodes' => 'Épisodes',
+    'episode-list' => 'Tous les épisodes',
+    'episode-create' => 'Créer un épisode',
+    'analytics' => 'Mesures d’audience',
+    'contributors' => 'Contributeurs',
+    'contributor-list' => 'Tous les contributeurs',
+    'contributor-add' => 'Ajouter un contributeur',
+    'settings' => 'Paramètres',
+    'platforms' => 'Plateformes du podcast',
+    'podcast-analytics' => 'Mesures d’audience',
+    'podcast-analytics-website' => 'Visites du site web',
+    'podcast-analytics-locations' => 'Localisations',
+    'podcast-analytics-unique-listeners' => 'Auditeurs uniques',
+    'podcast-analytics-players' => 'Lecteurs',
+];
diff --git a/app/Language/fr/User.php b/app/Language/fr/User.php
new file mode 100644
index 0000000000000000000000000000000000000000..69fda7b17548b26b3a2c3eb6073b9a9dfa38b895
--- /dev/null
+++ b/app/Language/fr/User.php
@@ -0,0 +1,52 @@
+<?php
+
+/**
+ * @copyright  2020 Podlibre
+ * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
+ * @link       https://castopod.org/
+ */
+
+return [
+    'edit_roles' => 'Modifier les rôles de {username}',
+    'forcePassReset' => 'Forcer la réinitialisation du mot de passe',
+    'ban' => 'Bloquer',
+    'unban' => 'Débloquer',
+    'delete' => 'Supprimer',
+    'create' => 'Créer un utilisateur',
+    'view' => 'Informations de {username}',
+    'all_users' => 'Tous les utilisateurs',
+    'list' => [
+        'user' => 'Utilisateurs',
+        'roles' => 'Rôles',
+        'banned' => 'Bloqué ?',
+    ],
+    'form' => [
+        'email' => 'E-mail',
+        'username' => 'Identifiant',
+        'password' => 'Mot de passe',
+        'new_password' => 'Nouveau mot de passe',
+        'roles' => 'Rôles',
+        'permissions' => 'Permissions',
+        'submit_create' => 'Créer un utilisateur',
+        'submit_edit' => 'Enregistrer',
+        'submit_password_change' => 'Valider !',
+    ],
+    'roles' => [
+        'superadmin' => 'Super-utilisateur',
+    ],
+    'messages' => [
+        'createSuccess' =>
+            'Utilisateur créé avec succès ! {username} devra modifier son mot de passe à la première authentification.',
+        'rolesEditSuccess' =>
+            'Les rôles de {username} ont été mis à jour avec succès.',
+        'forcePassResetSuccess' =>
+            '{username} devra modifier son mot de passe à la prochaine visite.',
+        'banSuccess' => '{username} a été bloqué.',
+        'unbanSuccess' => '{username} a été débloqué.',
+        'banSuperAdminError' =>
+            '{username} est un super-utilisateur, on ne bloque pas un super-utilisateur comme ça…',
+        'deleteSuperAdminError' =>
+            '{username} est un super-utilisateur, on ne supprime pas un super-utilisateur comme ça…',
+        'deleteSuccess' => '{username} a été supprimé.',
+    ],
+];
diff --git a/app/Language/fr/Validation.php b/app/Language/fr/Validation.php
new file mode 100644
index 0000000000000000000000000000000000000000..d9ae5dc517c643e5fe4af60b9d0ffadc2749e62a
--- /dev/null
+++ b/app/Language/fr/Validation.php
@@ -0,0 +1,18 @@
+<?php
+
+/**
+ * @copyright  2020 Podlibre
+ * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
+ * @link       https://castopod.org/
+ */
+
+return [
+    'not_in_protected_slugs' =>
+        'Le champ {field} est en conflit avec une des routes (admin, auth ou install).',
+    'min_dims' =>
+        '{field} n’est pas une image ou n’a pas la taille minimale requise.',
+    'is_image_squared' =>
+        '{field} n’est pas une image ou n’est pas carré (largeur et hauteur différentes).',
+    'validate_url' =>
+        'Le champs {field} doit être une adresse valide (par exemple https://exemple.com/).',
+];