diff --git a/README.md b/README.md
index 0b0dd9c..2ae8a16 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,7 @@ framework. The translations are located in the `src` folder.
| ---- | ---------------------------------------- | ------------------------------------------------------------ |
| de | [@litstack](https://github.com/litstack) |
|
| en | [@litstack](https://github.com/litstack) |
|
+| fr | [@Dezodev](https://github.com/Dezodev) |
|
diff --git a/src/en/profile.php b/src/en/profile.php
index cef4865..d5dc9aa 100644
--- a/src/en/profile.php
+++ b/src/en/profile.php
@@ -12,9 +12,9 @@
|
*/
- 'new_password' => 'New Passwort',
+ 'new_password' => 'New Password',
'new_password_confirm' => 'Confirm New Password',
- 'current_password' => 'Current Passwort',
+ 'current_password' => 'Current Password',
'change_password' => 'Change Password',
'messages' => [
'language' => 'This is the language in which you see the administration interface.',
diff --git a/src/fr/base.php b/src/fr/base.php
new file mode 100644
index 0000000..6ab29c2
--- /dev/null
+++ b/src/fr/base.php
@@ -0,0 +1,84 @@
+ 'Aucun•e :item trouvé•e',
+ 'no_item_selected' => 'Aucun•e :item sélectionné•e',
+ 'item_delete' => 'supprimer :item',
+ 'item_deleted' => ':item supprimé•e',
+ 'item_enter' => 'entrer :item',
+ 'item_create' => 'créer :item',
+ 'item_remove' => 'retirer :item',
+ 'item_select' => 'sélectionner :item',
+ 'item_order' => 'trier :item',
+ 'item_ordered' => ':item trié•e',
+ 'item_search' => 'rechercher :item',
+ 'item_add' => 'ajouter :item',
+ 'item_added' => ':item ajouté•e',
+ 'item_assign' => 'attribuer :item',
+ 'item_settings' => 'paramètres de :item',
+ 'item_item' => ':item élément',
+ 'user_hello' => 'Bonjour :user',
+ 'profile' => 'profil',
+ 'settings' => 'paramètres',
+ 'password' => 'mot de passe',
+ 'drag_and_drop' => 'Glisser-déposer',
+ 'name' => 'nom',
+ 'user' => 'utilisateur',
+ 'users' => 'utilisateurs',
+ 'email' => 'e-mail',
+ 'email_address' => 'adresse e-mail',
+ 'language' => 'Langue',
+ 'system_language' => 'Langue du système',
+ 'general' => 'général',
+ 'security' => 'sécurité',
+ 'device' => 'appareil',
+ 'logout' => 'se déconnecter',
+ 'change_order' => 'changer l\'ordre',
+ 'login' => 'connexion',
+ 'close' => 'fermer',
+ 'save' => 'sauvegarder',
+ 'saved' => 'enregistré',
+ 'done' => 'fini',
+ 'undo_changes' => 'Annuler les changements',
+ 'delete' => 'supprimer',
+ 'image' => 'image',
+ 'crop' => 'crop',
+ 'search' => 'rechercher',
+ 'first_name' => 'Prénom',
+ 'last_name' => 'Nom',
+ 'username' => 'identifiant',
+ 'cancel' => 'annuler',
+ 'location' => 'emplacement',
+ 'action' => 'action|actions',
+ 'role' => 'rôle',
+ 'roles' => 'rôles',
+ 'read' => 'lire',
+ 'update' => 'mettre à jour',
+ 'sort' => 'trier',
+ 'create' => 'créer',
+ 'delete' => 'supprimer',
+ 'permissions' => 'permissions',
+ 'group' => 'groupe',
+ 'unauthorized' => 'Cette action n\'est pas autorisée!',
+ 'page' => 'page',
+ 'all' => 'tout',
+ 'pages' => 'pages',
+ 'hello' => 'bonjour',
+ 'filter' => 'filtre',
+ 'toggle_all' => 'basculer tous',
+ 'messages' => [
+ 'order_changed' => 'L\'ordre a bien été modifiée',
+ 'are_you_sure' => 'Êtes-vous sûr? Cette action ne peut pas être annulée.',
+ ],
+];
diff --git a/src/fr/crud.php b/src/fr/crud.php
new file mode 100644
index 0000000..cd95260
--- /dev/null
+++ b/src/fr/crud.php
@@ -0,0 +1,69 @@
+ 'Récent en premier',
+ 'sort_old_to_new' => 'Ancien en premier',
+ 'preview' => 'Aperçu',
+ 'of' => 'de',
+ 'n_items_selected' => ':count élément sélectionné | :count éléments sélectionnés',
+
+ 'messages' => [
+ 'not_created' => ':model doit être créé afin d’ajouter un•e :relation',
+ 'deleted_items' => 'Suppression de :count élément.|Suppression de :count éléments.',
+ ],
+
+ 'fields' => [
+ 'block' => [
+ 'expand' => 'agrandir',
+ 'expand_all' => 'agrandir tout',
+ 'collapse_all' => 'réduire tout',
+ 'messages' => [
+ 'new_block' => 'Ajout d\'un nouveau bloc :type',
+ ],
+ ],
+ 'relation' => [
+ 'goto' => 'Aller à la relation',
+ 'unlink' => 'Dissocier la relation',
+ 'edit' => 'Modifier la relation',
+ 'messages' => [
+ 'relation_linked' => '{relation} lié•e avec succès.',
+ 'relation_unlinked' => 'Relation dissociée.',
+ 'confirm_unlink' => 'Veuillez confirmer que vous souhaitez dissocier l\'élément.',
+ 'max_items_reached' => 'Un maximum de :count éléments peuvent être sélectionnés.',
+ ],
+ ],
+ 'wysiwyg' => [
+ 'new_window' => 'ouvrir dans une nouvelle fenêtre',
+ ],
+ 'list' => [
+ 'messages' => [
+ 'max_depth' => 'La liste peut être imbriquée à un maximum de :count niveaux.',
+ 'confirm_delete' => 'Doit-on vraiment supprimer :item éléments?',
+ 'confirm_delete_info' => 'Si vous supprimez cet élément, vous supprimez également tous les éléments enfants en dessous.',
+ ],
+ ],
+ 'media' => [
+ 'messages' => [
+ 'image_uploaded' => 'Fichier téléchargé avec succès.',
+ 'image_alt_hint' => 'Le texte alternatif (texte qui décrit ce support) améliore l’accessibilité et l’expérience utilisateur pour les personnes qui ne peuvent pas voir les images sur les pages Web, y compris les utilisateurs qui utilisent des applications de lecture d’écran ou qui ont des connexions à faible bande passante.',
+ 'image_title_hint' => 'Le titre apparaît dans le navigateur sous forme d’infobulle, si vous déplacez le pointeur de la souris sur l’image.',
+ ],
+ ],
+ ],
+ 'meta' => [
+ 'title_hint' => 'Phrase facile à comprendre. Donne une idée du contenu de la page. Maximum :width de large.',
+ 'keywords_hint' => 'Les mots-clés les plus importants du contenu de la page. (Quelques) mots séparés par des virgules.',
+ 'description_hint' => 'Résumé court mais significatif de la page. Contient les mots clés les plus importants du contenu de la page.',
+ ],
+];
diff --git a/src/fr/errors.php b/src/fr/errors.php
new file mode 100644
index 0000000..b0e49be
--- /dev/null
+++ b/src/fr/errors.php
@@ -0,0 +1,19 @@
+ 'Pas trouvé.',
+ 'no_permission' => 'Cette action n\'est pas autorisée!',
+ 'server_error' => 'Server Error.',
+ 'too_many_requests' => 'Trop de demandes.',
+];
diff --git a/src/fr/login.php b/src/fr/login.php
new file mode 100644
index 0000000..f8646e3
--- /dev/null
+++ b/src/fr/login.php
@@ -0,0 +1,20 @@
+ 'Connexion',
+ 'do_login' => 'Se connecter',
+ 'email_or_username' => 'E-mail ou identifiant',
+ 'remember_me' => 'Se souvenir de moi',
+ 'forgot_password' => 'Mot de passe oublié',
+ 'failed' => 'Identifiants invalides.',
+];
diff --git a/src/fr/navigation.php b/src/fr/navigation.php
new file mode 100644
index 0000000..a9fd930
--- /dev/null
+++ b/src/fr/navigation.php
@@ -0,0 +1,16 @@
+ 'Gestion des utilisateurs',
+];
diff --git a/src/fr/permissions.php b/src/fr/permissions.php
new file mode 100644
index 0000000..2cbbcd6
--- /dev/null
+++ b/src/fr/permissions.php
@@ -0,0 +1,35 @@
+ 'nom du rôle',
+ 'operations' => [
+ 'lit-user-roles' => 'Rôles d\'utilisateur',
+ 'lit-users' => 'Utilisateurs',
+ ],
+ 'groups' => [
+ //
+ ],
+ 'messages' => [
+ 'cant_remove_admin_role' => 'Vous ne pouvez pas supprimer le rôle d’administrateur de votre compte.',
+ 'added_role' => 'Créé le rôle {role}.',
+ 'deleted_role' => 'Rôle supprimé {role}.',
+ 'cant_delete_role' => 'Le rôle {role} ne peut pas être supprimé.',
+ 'confirm_delete_role_msg' => 'Tous les utilisateurs du rôle {role} sont affectés au rôle User.',
+ 'all_permission_updated' => 'Permissions mises à jour : {group}',
+ 'permission_updated' => 'Permission mise à jour : {operation} {group}',
+ 'role_assigned' => '{username} s’est vu attribuer le rôle {role}.',
+ 'role_removed' => 'Le rôle {role} a été supprimé de {username}.',
+ ],
+];
diff --git a/src/fr/profile.php b/src/fr/profile.php
new file mode 100644
index 0000000..477601e
--- /dev/null
+++ b/src/fr/profile.php
@@ -0,0 +1,22 @@
+ 'Nouveau mot de passe',
+ 'new_password_confirm' => 'Confirmer le nouveau mot de passe',
+ 'current_password' => 'Mot de passe courant',
+ 'change_password' => 'Changer le mot de passe',
+ 'messages' => [
+ 'language' => 'C’est la langue dans laquelle vous voyez l’interface d’administration.',
+ ],
+];
diff --git a/src/fr/validation.php b/src/fr/validation.php
new file mode 100644
index 0000000..53f851a
--- /dev/null
+++ b/src/fr/validation.php
@@ -0,0 +1,123 @@
+ ':attribute doit être accepté•e.',
+ 'active_url' => ':attribute n’est pas une URL valide.',
+ 'after' => ':attribute doit être une date postérieure au :date.',
+ 'after_or_equal' => ':attribute doit être une date postérieure ou égale au :date.',
+ 'alpha' => ':attribute ne peut contenir que des lettres.',
+ 'alpha_dash' => ':attribute ne peut contenir que des lettres, des chiffres, des tirets et des underscores.',
+ 'alpha_num' => ':attribute ne peut contenir que des lettres et des chiffres.',
+ 'array' => ':attribute doit être un tableau.',
+ 'before' => ':attribute doit être une date antérieure au :date.',
+ 'before_or_equal' => ':attribute doit être une date antérieure ou égale au :date.',
+ 'between' => [
+ 'numeric' => ':attribute doit être compris•e entre :min et :max.',
+ 'file' => ':attribute doit être compris•e entre :min et :max kilobytes.',
+ 'string' => ':attribute doit comporter entre :min et :max caractères.',
+ 'array' => ':attribute doit avoir entre :min et :max éléments.',
+ ],
+ 'boolean' => 'Le champ :attribute doit être à true ou false.',
+ 'confirmed' => 'La confirmation de :attribute ne correspond pas.',
+ 'date' => ':attribute n’est pas une date valide.',
+ 'date_equals' => ':attribute doit être une date égale à :date.',
+ 'date_format' => ':attribute ne correspond pas au format :format.',
+ 'different' => ':attribute et :other doivent être différents.',
+ 'digits' => ':attribute doit être à :digits chiffres.',
+ 'digits_between' => ':attribute doit être entre :min et :max chiffres.',
+ 'dimensions' => ':attribute a des dimensions d’image non valides.',
+ 'distinct' => 'Le champ :attribute a une valeur dupliquée.',
+ 'email' => ':attribute doit être une adresse e-mail valide.',
+ 'ends_with' => ':attribute doit se terminer par l’une des valeurs suivantes : :values.',
+ 'exists' => 'L’:attribute sélectionné•e n’est pas valide.',
+ 'file' => ':attribute doit être un fichier.',
+ 'filled' => 'Le champ :attribute doit avoir une valeur.',
+ 'gt' => [
+ 'numeric' => ':attribute doit être supérieur à :value.',
+ 'file' => ':attribute doit être supérieur à :value kilobytes.',
+ 'string' => ':attribute doit être supérieur à :value caractères.',
+ 'array' => ':attribute doit avoir plus que :value éléments.',
+ ],
+ 'gte' => [
+ 'numeric' => ':attribute doit être supérieur ou égal à :value.',
+ 'file' => ':attribute doit être supérieur ou égal à :value kilobytes.',
+ 'string' => ':attribute doit être supérieur ou égal à :value caractères.',
+ 'array' => ':attribute doit avoir :value éléments ou plus.',
+ ],
+ 'image' => ':attribute doit être une image.',
+ 'in' => 'L’:attribute sélectionné•e n’est pas valide.',
+ 'in_array' => 'Le champ :attribute n’existe pas dans :other.',
+ 'integer' => ':attribute doit être un nombre entier.',
+ 'ip' => ':attribute doit être une adresse IP valide.',
+ 'ipv4' => ':attribute doit être une adresse IPv4 valide.',
+ 'ipv6' => ':attribute doit être une adresse IPv6 valide.',
+ 'json' => ':attribute doit être une chaîne JSON valide.',
+ 'lt' => [
+ 'numeric' => ':attribute doit être inférieure à :value.',
+ 'file' => ':attribute doit être inférieure à :value kilobytes.',
+ 'string' => ':attribute doit être inférieure à :value caractères.',
+ 'array' => ':attribute doit avoir moins de :value éléments.',
+ ],
+ 'lte' => [
+ 'numeric' => ':attribute doit être inférieure ou égale à :value.',
+ 'file' => ':attribute doit être inférieure ou égale à :value kilobytes.',
+ 'string' => ':attribute doit être inférieure ou égale à :value caractères.',
+ 'array' => ':attribute doit avoir :value éléments ou moins.',
+ ],
+ 'max' => [
+ 'numeric' => ':attribute ne doit pas être supérieur à :max.',
+ 'file' => ':attribute ne doit pas être supérieur à :max kilobytes.',
+ 'string' => ':attribute ne doit pas être supérieur à :max caractères.',
+ 'array' => ':attribute ne doit pas contenir plus de :max éléments.',
+ ],
+ 'mimes' => ':attribute doit être un fichier de type : :values.',
+ 'mimetypes' => ':attribute doit être un fichier de type : :values.',
+ 'min' => [
+ 'numeric' => ':attribute ne doit pas être inférieure à :min.',
+ 'file' => ':attribute ne doit pas être inférieure à :min kilobytes.',
+ 'string' => ':attribute ne doit pas être inférieure à :min caractères.',
+ 'array' => ':attribute ne doit pas contenir moins de :min éléments.',
+ ],
+ 'not_in' => 'L’:attribute sélectionné•e n’est pas valide.',
+ 'not_regex' => 'Le format de l’:attribute n’est pas valide.',
+ 'numeric' => ':attribute doit être un nombre.',
+ 'password' => 'Le mot de passe est incorrect.',
+ 'present' => 'Le champ :attribute doit être présent.',
+ 'regex' => 'Le format de l’:attribute n’est pas valide.',
+ 'required' => 'Le champ :attribute est requis.',
+ 'required_if' => 'Le champ :attribute est requis lorsque :other est :value.',
+ 'required_unless' => 'Le champ :attribute est requis sauf si :other se trouve dans :values.',
+ 'required_with' => 'Le champ :attribute est requis lorsque :values est présent.',
+ 'required_with_all' => 'Le champ :attribute est requis lorsque :values sont présentes.',
+ 'required_without' => 'Le champ :attribute est requis lorsque :values n’est pas présent.',
+ 'required_without_all' => 'Le champ :attribute est requis lorsqu’aucune des :values n’est présente.',
+ 'same' => ':attribute et :other doivent correspondre.',
+ 'size' => [
+ 'numeric' => ':attribute doit être à :size.',
+ 'file' => ':attribute doit être à :size kilobytes.',
+ 'string' => ':attribute doit être à :size caractères.',
+ 'array' => ':attribute doit contenir :size éléments.',
+ ],
+ 'starts_with' => ':attribute doit commencer par l’une des valeurs suivantes : :values.',
+ 'string' => ':attribute doit être une chaîne.',
+ 'timezone' => ':attribute doit être une zone valide.',
+ 'unique' => ':attribute a déjà été pris.',
+ 'uploaded' => ':attribute n’a pas pu être téléchargé•e.',
+ 'url' => 'Le format de l’:attribute n’est pas valide.',
+ 'uuid' => ':attribute doit être un UUID valide.',
+
+ 'incorrect_password' => 'Le mot de passe actuel est incorrect.',
+
+];