diff --git a/index.html b/index.html
index 5b4484a..e8aac45 100644
--- a/index.html
+++ b/index.html
@@ -67,7 +67,7 @@
})();
if (isRoot) {
- const supported = { fa: true, en: true, zh: true };
+ const supported = { fa: true, en: true, zh: true, fr: true };
for (const l of navigator.languages) {
if (l === 'en') break;
if (supported[l]) {
diff --git a/src/controllers/langselector/langselector.ctrl.js b/src/controllers/langselector/langselector.ctrl.js
index 06bced8..5044ec1 100644
--- a/src/controllers/langselector/langselector.ctrl.js
+++ b/src/controllers/langselector/langselector.ctrl.js
@@ -12,6 +12,7 @@ class LangSelector {
this.setupTemplate()
this.setChoices([
{ value: 'en', label: 'English' },
+ { value: 'fr', label: 'Français' },
{ value: 'fa', label: 'فارسی' },
{ value: 'zh', label: '简体中文' },
])
diff --git a/src/l10n/fr.yml b/src/l10n/fr.yml
new file mode 100644
index 0000000..7ea8584
--- /dev/null
+++ b/src/l10n/fr.yml
@@ -0,0 +1,61 @@
+airport_charlist: abcdefghijklmnopqrstuvwxyz0123456789 _*%!?#/\\|@
+attribution: par / sur / traduction OnlineCreation
+button_abort: ABANDONNER
+button_easy: Facile
+button_hard: Difficile
+button_instructions: COMMENT JOUER ?
+button_medium: Moyen
+button_start: DÉMARRER_
+connect_first: Reliez
+connect_second: points
+description: Le Mastermind du verrouillage Android. Un jeu que vous allez adorer détester.
+description_black: un point est présent dans le motif, mais dans le mauvais ordre.
+description_difficulty: Le paramètre de difficulté modifie le nombre de points à relier. Facile correspond à 4 points, moyen à 5 points et difficile à 6 points.
+description_game: Reliez les points pour trouver le motif de verrouillage. Après chaque tentative, le jeu vous dira combien de points vous avez correctement reliés.
+description_white: un point apparaît dans le motif et est dans le bon ordre
+feedback_success_first: Motif de verrouillage trouvé en
+feedback_success_second: essais.
+feedback_fail: Désolé, vous n\'avez pas réussi cette fois.
+label_success: Félicitations !
+label_fail: Échec.
+label_goodluck: Bonne chance !_
+lang_code: fr
+mode_challenge: Challenge
+mode_challenge_description: Le mode Challenge vous donne seulement 10 essais
+mode_countdown: Compte à rebours
+mode_countdown_description: Terminez le jeu en une minute, sans limite d\'essais.
+mode_practice: Entraînement
+mode_practice_description: Pas de pression, découvrez et entraînez vous
+name_app: BreakLock
+quote_success00: C\'était de la pure chance, rien d\'autre.
+quote_success01: Vous avez eu de la chance.
+quote_success02: Aucun mérite. Absolument aucun.
+quote_success03: Trop facile !
+quote_success04: Absolument aucun neurone n\'a été utilisé pendant ce match.
+quote_success05: Ne vous avisez pas de twitter votre score.
+quote_success06: Saperlipopette ! C\'était moins une.
+quote_success07: Ça semble honnête, avec un peu de chance.
+quote_success08: Plutôt bien !
+quote_success09: Vous l\'avez fait !
+quote_success10: Essayer des figures aléatoires n\'est pas une stratégie.
+quote_success11: C\'était looooooooong.
+quote_success12: Au moins, vous l\'avez trouvé.
+quote_success13: Vous détestez ce jeu maintenant, non ?
+quote_success14: J\'espère que vous n\'avez pas triché.
+quote_success15: Votre persévérance est impressionnante.
+quote_success16: 404 Logique introuvable.
+quote_success17: Aucun commentaire
+quote_fail00: Je crois qu\'il y a encore du travail.
+quote_fail01: Comprenez-vous le jeu ? Ne le prenez pas personnellement, j\'ai du mal à l\'expliquer.
+quote_fail02: Un jour, vous y arriverez...
+quote_fail03: Ce n\'est pas drôle pour vous, mais ça l\'est pour moi ;)
+quote_fail04: Pas de stress, vous allez y arriver.
+quote_fail05: Heureusement que votre vie n\'était pas en jeu.
+quote_fail06: Le point positif est qu\'il vous reste une marge de progression.
+quote_fail07: GAME OVER ! Insérez une pièce et essayez encore
+special_css:
+summary_see: Veuillez sélectionner une option.
+summary_action_solution: SOLUTION_
+summary_action_new_game: RÉESSAYER_
+summary_action_back_home: RETOUR_
+tweet_feedback: Envoyez-moi vos impressions à
\ No newline at end of file