diff --git a/FRENCH/src/SUMMARY.md b/FRENCH/src/SUMMARY.md
index 4305682b80..95e39c60b0 100644
--- a/FRENCH/src/SUMMARY.md
+++ b/FRENCH/src/SUMMARY.md
@@ -24,6 +24,7 @@
- [Comprendre la possession](ch04-00-understanding-ownership.md)
- [Qu'est-ce que la possession ?](ch04-01-what-is-ownership.md)
- [Les références et l'emprunt](ch04-02-references-and-borrowing.md)
+ - [Le type slice](ch04-03-slices.md)
- [Utiliser les structures pour structurer des données apparentées](ch05-00-structs.md)
- [Définir et instancier des structures](ch05-01-defining-structs.md)
diff --git a/FRENCH/src/ch04-03-slices.md b/FRENCH/src/ch04-03-slices.md
index d8c9f6f1f2..3a93bfeaf2 100644
--- a/FRENCH/src/ch04-03-slices.md
+++ b/FRENCH/src/ch04-03-slices.md
@@ -2,7 +2,7 @@
## The Slice Type
-->
-## Le type de découpage
+## Le type slice
-Un autre type de données qui ne prend pas possession est le *découpage*. Un
-découpage vous permet d'obtenir une référence vers une suite continue d'éléments
-d'une collection plutôt que toute la collection.
+Un autre type de donnée qui ne prend pas possession est la *slice*. Une slice
+vous permet d'obtenir une référence vers une séquence continue d'éléments d'une
+collection plutôt que toute la collection.
-Encart 4-7 : La fonction `premier_mot` qui retourne un
-indice d'octet provenant du paramètre `String`
+Encart 4-7 : La fonction `premier_mot` qui retourne
+l'indice d'un octet provenant du paramètre `String`
Comme nous avons besoin de parcourir la `String` élément par élément et de
-vérifier si la valeur est un espace, nous allons convertir notre `String` en un
+vérifier si la valeur est une espace, nous convertissons notre `String` en un
tableau d'octets en utilisant la méthode `as_bytes` :
-Comme la méthode `enumerate` retourne un tuple, ne pouvons utiliser des motifs
+Comme la méthode `enumerate` retourne un tuple, nous pouvons utiliser des motifs
pour déstructurer ce tuple, comme nous pourrions le faire n'importe où avec
Rust. Donc dans la boucle `for`, nous précisons un motif qui indique que nous
-définissons `i` pour l'indice à partir du tuple et `&element` pour l'octet dans
+définissons `i` pour l'indice au sein du tuple et `&element` pour l'octet dans
le tuple. Comme nous obtenons une référence vers l'élément avec
`.iter().enumerate()`, nous utilisons `&` dans le motif.
@@ -174,8 +173,8 @@ using the byte literal syntax. If we find a space, we return the position.
Otherwise, we return the length of the string by using `s.len()`:
-->
-Avec la boucle `for`, nous recherchons l'octet qui représente l'espace en
-utilisant la syntaxe des mots binaires. Si nous trouvons un espace, nous
+Au sein de la boucle `for`, nous recherchons l'octet qui représente l'espace en
+utilisant la syntaxe de littéral d'octet. Si nous trouvons une espace, nous
retournons sa position. Sinon, nous retournons la taille de la chaîne en
utilisant `s.len()` :
@@ -191,7 +190,7 @@ s.len()
-->
```rust,ignore
- if item == b' ' {
+ if element == b' ' {
return i;
}
}
@@ -289,12 +288,12 @@ the variable `s` to try to extract the first word out, but this would be a bug
because the contents of `s` have changed since we saved `5` in `word`.
-->
-Ce programme se compile sans aucune erreur et le serait toujours si nous
+Ce programme se compile sans aucune erreur et le ferait toujours si nous
utilisions `mot` après avoir appelé `s.clear()`. Comme `mot` n'est pas du tout
-lié à `s`, `mot` contient toujours la valeur `5`. Nous pourrions
-utiliser cette valeur `5` avec la variable `s` pour essayer d'en extraire le
-premier mot, mais cela serait un bogue, car le contenu de `s` a changé depuis
-que nous avons enregistré `5` dans `mot`.
+lié à `s`, `mot` contient toujours la valeur `5`. Nous pourrions utiliser cette
+valeur `5` avec la variable `s` pour essayer d'en extraire le premier mot, mais
+cela serait un bogue, car le contenu de `s` a changé depuis que nous avons
+enregistré `5` dans `mot`.
-Maintenant nous avons un indice de début *et* un indice de fin, donc nous avons
-encore plus de valeurs qui sont calculées à partir de la donnée à un instant
-donné, mais qui n'est pas en temps réel. Nous avons maintenant trois variables
-isolées qui ont besoin d'être maintenues à jour.
+Maintenant, nous avons un indice de début *et* un indice de fin, donc nous avons
+encore plus de valeurs qui sont calculées à partir d'une donnée dans un état
+donné, mais qui ne sont pas liées du tout à l'état de cette donnée. Nous avons
+maintenant trois variables isolées qui ont besoin d'être maintenues à jour.
-Heureusement, Rust a une solution pour ce problème : les découpages de chaînes
-de caractères.
+Heureusement, Rust a une solution pour ce problème : les *slices* de chaînes de
+caractères.
-### Les découpages de chaînes de caractères
+### Les slices de chaînes de caractères
-Un *découpage de chaîne de caractère* est une référence à une partie
-d'une `String`, et ressemble à ceci :
-
-
+Une *slice de chaîne de caractères* (ou *slice de chaîne*) est une référence à
+une partie d'une `String`, et ressemble à ceci :
```rust
let s = String::from("hello world");
@@ -385,14 +375,14 @@ the length of the slice, which corresponds to `ending_index` minus
a slice that contains a pointer to the 7th byte of `s` with a length value of 5.
-->
-Nous pouvons créer des découpages en utilisant un intervalle entre crochets en
-spécifiant `[indice_debut..indice_fin]`, où `indice_debut` est la première
-position dans le découpage et `indice_fin` est la dernière position dans le
-découpage plus une position. En interne, la structure de données du découpage
-enregistre la position de départ et la longueur du découpage, ce qui correspond
-à `indice_fin` moins `indice_debut`. Donc dans le cas du
-`let world = &s[6..11];`, `world` va être un découpage qui a un pointeur vers le
-7e octet de `s` et une longueur de 5.
+Nous pouvons créer des slices en utilisant un intervalle entre crochets en
+spécifiant `[indice_debut..indice_fin]`, où `indice_debut` est la position du
+premier octet de la slice et `indice_fin` est la position juste après le dernier
+octet de la slice. En interne, la structure de données de la slice stocke la
+position de départ et la longueur de la slice, ce qui correspond à `indice_fin`
+moins `indice_debut`. Donc dans le cas de `let world = &s[6..11];`, `world` est
+une slice qui contient un pointeur vers l'octet d'indice 6 de `s` et une
+longueur de 5.
+
-
+
-Illustration 4-6 : Un découpage d'une chaîne qui pointe
-vers une partie d'une `String`
+Illustration 4-6 : Une slice de chaîne qui pointe vers
+une partie d'une `String`
-
-```rust
-let s = String::from("hello");
-
-let decoupage = &s[0..2];
-let decoupage = &s[..2];
-```
-De la même manière, si votre découpage contient les derniers octets de la
-`String`, vous pouvez ne rien mettre à la fin. Cela veut dire que ces deux
-ceci revient au même :
+De la même manière, si votre slice contient le dernier octet de la `String`,
+vous pouvez ne rien mettre à la fin. Cela veut dire que ces deux cas sont
+identiques :
-Vous pouvez aussi ne mettre aucune limite pour créer un découpage de toute la
+Vous pouvez aussi ne mettre aucune limite pour créer une slice de toute la
chaîne de caractères. Ces deux cas sont donc identiques :
-> Remarque : Les indices de l'intervalle d'un découpage d'une chaîne de
-> caractères doivent toujours se trouver dans les zones acceptables de
-> séparation des caractères encodés en UTF-8. Si vous essayez de créer un
-> découpage d'une chaîne de caractères qui s'arrête au milieu d'un caractère
-> encodé sur plusieurs octets, votre programme va se fermer avec une erreur.
-> Afin de simplifier l'explication des découpages de chaînes de caractères, nous
-> utiliserons uniquement l'ASCII dans cette section; nous verons la gestion de
-> l'UTF-8 dans une section du [chapitre 8][strings].
+> Remarque : Les indices de l'intervalle d'une slice de chaîne doivent toujours
+> se trouver dans les zones acceptables de séparation des caractères encodés en
+> UTF-8. Si vous essayez de créer une slice de chaîne qui s'arrête au milieu
+> d'un caractère encodé sur plusieurs octets, votre programme va se fermer avec
+> une erreur. Afin de simplifier l'explication des slices de chaînes, nous
+> utiliserons uniquement l'ASCII dans cette section ; nous verrons la gestion
+> d'UTF-8 dans la section [“Stocker du texte encodé en UTF-8 avec les chaînes de
+> caractères”][strings] du chapitre 8.
-Maintenant que nous savons tout cela, essayons de ré-écrire `premier_mot` pour
-retourner un découpage. Le type pour les “découpages de chaînes de caractères”
+Maintenant que nous savons tout cela, essayons de réécrire `premier_mot` pour
+qu'il retourne une slice. Le type pour les slices de chaînes de caractères
s'écrit `&str` :
Nous récupérons l'indice de la fin du mot de la même façon que nous l'avions
-fait dans l'encart 4-7, en cherchant la première occurrence d'un espace. Lorsque
-nous trouvons un espace, nous retournons un découpage de la chaîne de caractère
-en utilisant le début de la chaîne de caractères et l'indice de l'espace comme
-indices de début et fin.
+fait dans l'encart 4-7, en cherchant la première occurrence d'une espace.
+Lorsque nous trouvons une espace, nous retournons une slice de chaîne en
+utilisant le début de la chaîne de caractères et l'indice de l'espace comme
+indices de début et de fin respectivement.
-Désormais quand nous appelons `premier_mot`, nous récupérons une seule valeur
-qui est liée à la donnée de base. La valeur est construite avec une référence
-vers le point de départ du découpage et avec le nombre d'éléments dans le
-découpage.
+Désormais, quand nous appelons `premier_mot`, nous récupérons une unique valeur
+qui est liée à la donnée de base. La valeur se compose d'une référence vers le
+point de départ de la slice et du nombre d'éléments dans la slice.
-Retourner un découpage fonctionnerait aussi pour une fonction `second_mot` :
+Retourner une slice fonctionnerait aussi pour une fonction `second_mot` :
-Nous avons maintenant une API simple qui est bien plus difficile à perturber,
+Nous avons maintenant une API simple qui est bien plus difficile à mal utiliser,
puisque le compilateur va s'assurer que les références dans la `String` seront
-toujours en vigueur. Souvenez-vous du bogue du programme de l'encart 4-8,
+toujours en vigueur. Vous souvenez-vous du bogue du programme de l'encart 4-8,
lorsque nous avions un indice vers la fin du premier mot mais qu'ensuite nous
-avions vidé la chaîne de caractères et que notre index n'était plus valide ? Ce
+avions vidé la chaîne de caractères et que notre indice n'était plus valide ? Ce
code était logiquement incorrect, mais ne montrait pas immédiatement une erreur.
Les problèmes apparaîtront plus tard si nous essayons d'utiliser l'indice du
-premier mot avec une chaîne de caractère qui a été vidée. Les découpages rendent
-ce bogue impossible et nous signale bien plus tôt que nous avons un problème
-avec notre code. Utiliser la version avec le découpage de `premier_mot` va
-afficher une erreur au moment de la compilation :
+premier mot avec une chaîne de caractères qui a été vidée. Les slices rendent ce
+bogue impossible et nous signalent bien plus tôt que nous avons un problème avec
+notre code. Utiliser la version avec la slice de `premier_mot` va causer une
+erreur de compilation :
-Rappellons-nous que d'après les règles d'emprunt, si nous avons une référence
+Rappelons-nous que d'après les règles d'emprunt, si nous avons une référence
immuable vers quelque chose, nous ne pouvons pas avoir une référence mutable
-en même temps. Etant donné que `clear` a besoin de modifier la `String`, il a
+en même temps. Étant donné que `clear` a besoin de modifier la `String`, il a
besoin d'une référence mutable. Rust interdit cette situation, et la compilation
échoue. Non seulement Rust a simplifié l'utilisation de notre API, mais il a
aussi éliminé une catégorie entière d'erreurs au moment de la compilation !
@@ -710,22 +693,16 @@ aussi éliminé une catégorie entière d'erreurs au moment de la compilation !
#### String Literals Are Slices
-->
-#### Les chaînes de caractères pures sont des découpages
+#### Les littéraux de chaîne de caractères sont aussi des slices
-Rappellez-vous lorsque nous avons appris que les chaînes de caractères pures
-étaient enregistrées dans le binaire. Maintenant que nous connaissons les
-découpages, nous pouvons désormais comprendre les chaînes de caractères pures.
-
-
+Rappelez-vous lorsque nous avons appris que les littéraux de chaîne de
+caractères étaient enregistrés dans le binaire. Maintenant que nous connaissons
+les slices, nous pouvons désormais comprendre les littéraux de chaîne.
```rust
let s = "Hello, world!";
@@ -737,24 +714,23 @@ the binary. This is also why string literals are immutable; `&str` is an
immutable reference.
-->
-Ici, le type de `s` est un `&str` : c'est un découpage qui pointe vers un
-endroit précis du binaire. C'est aussi la raison pour laquelle les chaînes de
-caractères pures sont immuables; `&str` est une référence immuable.
+Ici, le type de `s` est un `&str` : c'est une slice qui pointe vers un endroit
+précis du binaire. C'est aussi la raison pour laquelle les littéraux de chaîne
+sont immuables ; `&str` est une référence immuable.
-#### Les découpages de chaînes de caractères en paramètres
+#### Les slices de chaînes de caractères en paramètres
-Savoir que vous pouvez utiliser des découpages de chaînes de caractères pures et
-des `String` nous invite à apporter une petite amélioration sur `premier_mot`,
-dont voici sa signature :
+Savoir que l'on peut utiliser des slices de littéraux et de `String` nous incite
+à apporter une petite amélioration à `premier_mot`, dont voici la signature :
-Un Rustacé plus expérimenté écrirait plutôt la signature de l'encart 4_9, car
+Un Rustacé plus expérimenté écrirait plutôt la signature de l'encart 4-9, car
cela nous permet d'utiliser la même fonction sur les `&String` et aussi les
`&str` :
@@ -792,7 +768,7 @@ a string slice for the type of the `s` parameter
-->
Encart 4-9 : Amélioration de la fonction `premier_mot` en
-utilisant un découpage de chaîne de caractère comme type du paramètre `s`
+utilisant une slice de chaîne de caractères comme type du paramètre `s`
-Si nous avons un découpage de chaîne de caractères, nous pouvons lui donner
-directement. Si nous avons une `String`, nous pouvons envoyer un découpage de
-toute la `String`. Concevoir une fonction afin de prendre un découpage de chaîne
-de caractères plutôt qu'une référence à une `String` rend notre API plus
-générique et plus utile sans perdre aucune fonctionnalité :
+Si nous avons une slice de chaîne, nous pouvons la passer en argument
+directement. Si nous avons une `String`, nous pouvons envoyer une slice de toute
+la `String`. Définir une fonction qui prend une slice de chaîne plutôt qu'une
+référence à une `String` rend notre API plus générique et plus utile sans perdre
+aucune fonctionnalité :
-### Les autres découpages
+### Les autres slices
-Les découpages de chaînes de caractères, comme vous pouvez l'imaginer, sont
-spécifiques aux chaînes de caractères. Mais il existe aussi un type plus
-générique. Imaginons ce tableau de données :
-
-
+Les slices de chaînes de caractères, comme vous pouvez l'imaginer, sont
+spécifiques aux chaînes de caractères. Mais il existe aussi un type de slice
+plus générique. Imaginons ce tableau de données :
```rust
let a = [1, 2, 3, 4, 5];
@@ -904,23 +873,15 @@ Just as we might want to refer to a part of a string, we might want to refer
to part of an array. We’d do so like this:
-->
-Comme nous pouvons nous référer à un échantillon d'une chaîne de caractères,
+Tout comme nous pouvons nous référer à une partie d'une chaîne de caractères,
nous pouvons nous référer à une partie d'un tableau. Nous pouvons le faire comme
ceci :
-
-
-```rust
-let a = [1, 2, 3, 4, 5];
-
-let decoupage = &a[1..3];
-```
-Ce découpage est de type `&[i32]`. Il fonctionne de la même manière que les
-découpages de chaînes de caractères, en enregistrant une référence vers le
-premier élément et une longueur. Vous réutiliserez ce type de découpage pour
-toutes les autres types de collections. Nous aborderons ces collections en
-détail quand lorsque nous verrons les vecteurs au chapitre 8.
+Cette slice est de type `&[i32]`. Elle fonctionne de la même manière que les
+slices de chaînes de caractères, en enregistrant une référence vers le premier
+élément et une longueur. Vous utiliserez ce type de slice pour tous les autres
+types de collections. Nous aborderons ces collections en détail quand nous
+verrons les vecteurs au chapitre 8.
-Les concepts de possession, d'emprunt, et les découpages garantissent la
-sécurité de la mémoire dans les programmes Rust au moment de la compilation. Le
-langage Rust vous donne le contrôle sur l'utilisation de la mémoire comme tous
-les autres systèmes de langages de programmation, mais celui qui possède les
-données nettoie automatiquement ces données quand il sort de la portée, et cela
-vous permet de ne pas avoir à écrire et déboguer du code en plus pour avoir
-cette fonctionnalité.
+Les concepts de possession, d'emprunt et de slices garantissent la sécurité de
+la mémoire dans les programmes Rust au moment de la compilation. Le langage Rust
+vous donne le contrôle sur l'utilisation de la mémoire comme tous les autres
+langages de programmation système, mais le fait que celui qui possède des
+données nettoie automatiquement ces données quand il sort de la portée vous
+permet de ne pas avoir à écrire et déboguer du code en plus pour avoir cette
+fonctionnalité.