diff --git a/docs/releasenotes.html b/docs/releasenotes.html
index 8bc349e07..25e0cd14e 100644
--- a/docs/releasenotes.html
+++ b/docs/releasenotes.html
@@ -98,6 +98,10 @@ checkstyle-user).
Added charset property to TreeWalker and StrictDuplicateCode
check (addresses bug 975346).
+
+ French message translations,
+ contributed by Pierre Dittgen
+ (request 978916).
diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/blocks/messages_fr.properties b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/blocks/messages_fr.properties
new file mode 100644
index 000000000..44b5f22af
--- /dev/null
+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/blocks/messages_fr.properties
@@ -0,0 +1,10 @@
+block.empty=Bloc ''{0}'' vide.
+block.nested=Evitez d''imbriquer les blocs.
+block.noStmt=Le bloc devrait contenir au moins une instruction.
+
+line.alone=''{0}'' devrait être seul sur sa ligne.
+line.new=''{0}'' devrait être sur une nouvelle ligne.
+line.previous=''{0}'' devrait être sur la ligne précédente.
+line.same=''{0}'' devrait être sur la même ligne.
+
+needBraces=L''instruction ''{0}'' devrait utiliser des accolades (''{'' et ''}'').
diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/coding/messages_fr.properties b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/coding/messages_fr.properties
new file mode 100644
index 000000000..4c71e8a27
--- /dev/null
+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/coding/messages_fr.properties
@@ -0,0 +1,84 @@
+array.trailing.comma=La dernière valeur d''un tableau devrait être suivie d''une virgule.
+
+assignment.inner.avoid=Evitez d'affecter une valeur à une variable au sein d''une expression.
+
+covariant.equals=Votre méthode equals compare uniquement les objets de votre classe. N''oubliez pas de surcharger la méthode equals(java.lang.Object).
+
+doublechecked.locking.avoid=L'idiome de "blocage par double-vérification" doit être prohibée car non efficace.
+
+empty.statement=Instruction vide.
+
+equals.noHashCode=La définition de la méthode ''equals()'' doit toujours être accompagnée de la définition de la méthode ''hashCode()''.
+
+final.variable=La variable ''{0}'' devrait être finale.
+
+hidden.field=''{0}'' masque un attribut.
+
+illegal.token=Il est interdit d''utiliser ''{0}''.
+
+illegal.token.text=Chaîne de caractères interdite ''{0}''.
+
+instantiation.avoid=L'instantiation de la classe {0} est prohibée.
+
+magic.number=''{0}'' devrait être défini comme une constante.
+
+missing.super.call=La méthode ''{0}'' devrait appeler ''super.{0}''.
+missing.switch.default=Il manque le cas \"default\" dans le bloc \"switch\".
+
+multiple.string.literal=La chaîne {0} apparait {1} fois dans le fichier.
+
+redundant.throws.classInfo=Impossible d''obtenir les informations relatives à {0}.
+redundant.throws.duplicate=Clause throws redondante : ''{0}'' est présent plus d''une fois.
+redundant.throws.subclass=Clause throws redondante : ''{0}'' est une sous-classe de ''{1}''.
+redundant.throws.unchecked=Clause throws redondante : ''{0}'' est une exception non vérifiée.
+
+simplify.boolreturn=Le test peut être supprimé et l''expression directement retournée.
+simplify.expression=L''expression peut être simplifiée.
+
+nested.if.depth=Le nombre de ''if'' imbriqué est de {0,number,integer}, alors que le maximum autorisé est de {1,number,integer}.
+nested.try.depth=Le nombre de ''try'' imbriqué est de {0,number,integer}, alors que le maximum autorisé est de {1,number,integer}.
+
+string.literal.equality=Les chaines de caractères littérales devraient être comparées avec la méthode equals() et pas avec ''{0}''.
+
+illegal.catch=Catcher l''exception ''{0}'' est prohibé.
+missing.package.declaration=Déclaration de package manquante.
+
+junit.method.name=La méthode ''{0}'' devrait être renommée ''{1}''.
+junit.method.return.type=La méthode ''{0}'' devrait être déclarée avec un type de retour {1}.
+junit.method.parameters=La méthode ''{0}'' devrait être déclarée sans paramètres.
+junit.method.public.and.static=La méthode ''{0}'' devrait être déclarée statique.
+junit.method.protected.or.public=La méthode ''{0}'' devrait être protégée ou publique.
+junit.method.static=La méthode ''{0}'' ne devrait pas être statique.
+
+return.count=Le nombre de return est de {0,number,integer} alors que le maximum autorisé est de {1,number,integer}.
+
+illegal.type=Déclarer des variables, des valeurs de retour ou des paramètres de type ''{0}'' est interdit.
+
+declaration.order.constructor=La définition des constructeurs n''apparait pas dans le bon ordre.
+declaration.order.method=La définition des méthodes n''apparait pas dans le bon ordre.
+declaration.order.static=La définition des variables statiques n''apparait pas dans le bon ordre.
+declaration.order.instance=La définition des variables d''instance n''apparait pas dans le bon ordre.
+declaration.order.access=La définition des variables n''est pas triée suivant leur portée.
+
+parameter.assignment=Il est interdit d''affecter une valeur au paramètre ''{0}''.
+
+modified.control.variable=La variable de controle ''{0}'' est modifiée.
+
+explicit.init=L''initialisation explicite de la variable ''{0}'' à la valeur ''{1}'' est inutile, c''est la valeur par défaut pour ce type.
+default.comes.last=Le cas \"default\" devrait apparaitre en dernier dans le bloc \"switch\".
+missing.ctor=Il manque un constructeur à la classe.
+fall.through=Le cas précédent du \"switch\" ne contient pas de break, return, throw ou continue.
+require.this.variable=La référence à la variable d''instance ''{0}'' doit utiliser \"this.\".
+require.this.unfound.variable=Impossible de trouver où ''{0}'' est déclaré.
+require.this.method=L''appel à la méthode ''{0}'' nécessite l''utilisation de \"this.\".
+require.this.unexpected.visit=RequireThis: type de lexème ''{0}'' inattendu.
+require.this.unexpected.leaving=RequireThis: type du dernier lexème ''{0}'' inattendu.
+multiple.variable.declarations=Ne déclarez pas plus d''une variable par ligne.
+multiple.variable.declarations.comma=Chaque déclaration de variable doit faire l''objet d''une instruction à part.
+
+unnecessary.paren.assign=Parenthèses inutiles autour la partie droite de l''affectation.
+unnecessary.paren.expr=Parenthèses inutiles autour de l''expression.
+unnecessary.paren.ident=Parenthèses inutiles autour de l''identifiant ''{0}''.
+unnecessary.paren.literal=Parenthèses inutiles autour de la chaîne littérale ''{0}''.
+unnecessary.paren.return=Parenthèses inutiles autour de la valeur de retour.
+unnecessary.paren.string=Parenthèses inutiles autour de la chaîne {0}.
diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/design/messages_fr.properties b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/design/messages_fr.properties
new file mode 100644
index 000000000..945f7e36d
--- /dev/null
+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/design/messages_fr.properties
@@ -0,0 +1,6 @@
+design.forExtension=La méthode ''{0}'' n''est pas conçue pour être dérivée - il faut la déclarer abstraite, finale ou la laisser vide.
+final.class=La classe {0} devrait être déclarée finale.
+interface.type=Les interfaces devraient décrire des types et, à ce titre, comporter des méthodes.
+variable.notPrivate=La variable ''{0}'' devrait être privée et avoir des accesseurs.
+mutable.exception=L''attribut ''{0}'' devrait être déclarée final.
+throws.count=Le nombre de clause \"throws\" {0,number,integer}, alors que le maximum autorisé est de {1,number,integer}.
diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/duplicates/messages_fr.properties b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/duplicates/messages_fr.properties
new file mode 100644
index 000000000..2843f38c6
--- /dev/null
+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/duplicates/messages_fr.properties
@@ -0,0 +1 @@
+duplicates.lines=Copier-coller de {0} lignes dans {1}, à partir de la ligne {2}
diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/imports/messages_fr.properties b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/imports/messages_fr.properties
new file mode 100644
index 000000000..f32fc494c
--- /dev/null
+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/imports/messages_fr.properties
@@ -0,0 +1,8 @@
+import.avoidStar=L''utilisation des import.* est prohibé - {0}.
+import.duplicate=Import dupliqué à la ligne {0,number,integer} - {1}.
+import.illegal=Import d''un package illégal - {0}.
+import.lang=Import redondant car la classe importée est située dans le package java.lang - {0}.
+import.same=Import redondant car la classe importée est située dans le même package - {0}.
+import.unused=Import inutilisé - {0}.
+import.ordering=L''ordre d'import n''est pas respecté : ''{0}''.
+import.separation=''{0}'' devrait être séparé des imports précédents.
diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/indentation/messages_fr.properties b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/indentation/messages_fr.properties
new file mode 100644
index 000000000..ce6d8b7b5
--- /dev/null
+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/indentation/messages_fr.properties
@@ -0,0 +1,2 @@
+indentation.error={0} au niveau d''indentation {1} n''est pas indenté correctement ({2})
+indentation.child.error=Le fils de {0} au niveau d''identation {1} n'est pas indenté correctement ({2})
diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/j2ee/messages_fr.properties b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/j2ee/messages_fr.properties
new file mode 100644
index 000000000..fcf2f6132
--- /dev/null
+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/j2ee/messages_fr.properties
@@ -0,0 +1,19 @@
+abstract.bean=L'entity bean ''{0}'' ne doit pas être abstrait.
+hasfinalize.bean={0} ne doit pas définir la méthode ''finalize()''.
+hasthrows.bean=La méthode ''{0}'' ne doit pas déclarer l''exception ''{1}''.
+illegalmodifier.bean={0} ne doit pas avoir le mot clef ''{1}''.
+illegalmodifiermethod.bean=La méthode ''{0}'' ne doit pas avoir le mot clef ''{1}''.
+illegalthrows.bean=La méthode ''{0}'' ne doit pas déclarer l''exception ''{1}''.
+missingmethod.bean={0} doit avoir la méthode ''{1}''.
+missingthrows.bean=La méthode ''{0}'' doit déclarer l''exception ''{1}''.
+nonabstract.bean=L''entity bean ''{0}'' doit être abstrait.
+nonfinalstatic.bean=L''attribut statique ''{0}'' doit être final.
+nonpublicconstructor.bean={0} doit avoir un constructeur public sans paramètres.
+nonpublic.bean={0} doit être public.
+nonpublicmethod.bean=La méthode ''{0}'' doit être publique.
+nonvoidmethod.bean=La méthode ''{0}'' doit être \"void\".
+paramcount.bean=La méthode ''{0}'' doit avoir {1} paramètre(s).
+thisparameter.bean=Ne passez pas ''this'' en paramètre.
+thisreturn.bean=Ne retournez pas ''this''.
+unmatchedejbcreate.bean=La méthode ''{0}'' doit déclarer la méthode ''{1}'' correspondante.
+voidmethod.bean=La méthode ''{0}'' ne doit pas être \"void\".
diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_fr.properties b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_fr.properties
new file mode 100644
index 000000000..0b0803be2
--- /dev/null
+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/javadoc/messages_fr.properties
@@ -0,0 +1,16 @@
+javadoc.classInfo=Impossible d''obtenir les informations relatives à la classe {0} pour la balise ''{1}''.
+javadoc.expectedTag=Balise javadoc {0} manquante pour ''{1}''.
+javadoc.extrahtml=Balise HTML en trop : {0}
+javadoc.incompleteTag=Balise HTML incomplète : {0}
+javadoc.missing=Commentaire javadoc manquant.
+javadoc.noperiod=La première ligne doit se terminer avec un point.
+javadoc.packageHtml=Fichier de documentation de package manquant.
+javadoc.return.duplicate=Balise javadoc @return présente plus d''une fois.
+javadoc.return.expected=Balise javadoc @return manquante.
+javadoc.unclosedhtml=Balise HTML trouvée dans la javadoc : {0}
+javadoc.unusedTag=Balise javadoc {0} inutilisé pour ''{1}''.
+javadoc.unusedTagGeneral=Balise javadoc inutilisé.
+javadoc.empty=Le commentaire javadoc est vide.
+
+type.missingTag=Dans le commentaire javadoc de la classe, il manque une balise {0}.
+type.tagFormat=La balise javadoc {0} doit correspondre au motif ''{1}''.
diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/messages_fr.properties b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/messages_fr.properties
new file mode 100644
index 000000000..8ca4f23b1
--- /dev/null
+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/messages_fr.properties
@@ -0,0 +1,30 @@
+noNewlineAtEOF=Il manque un caractère NewLine à la fin du fichier
+
+redundantModifier=Mot-clef ''{0}'' redondant.
+
+todo.match=Le commentaire correspond au format TODO ''{0}''.
+
+upperEll=Utilisez un ''L'' majuscule pour une meilleure lisibilité.
+
+header.missing=En-tête manquante - Le fichier ne contient pas assez de lignes.
+header.mismatch=La ligne ne correspond pas à la ligne d'en-tête attendue ''{0}''.
+
+mod.order=Le mot-clef ''{0}'' n'apparait pas dans l'ordre préconisé par les JLS.
+
+
+illegal.regexp=La ligne correspond au motif illégal ''{0}''.
+required.regexp=Le motif ''{0}'' attendu dans le fichier est manquant.
+
+
+translation.missingKey=La traduction du message ''{0}'' est manquante.
+
+missing.switch.default=Il manque le cas \"default\" dans le bloc \"switch\".
+
+uncommented.main=La méthode principale n'est pas commentée.
+
+descendant.token.min=Le nombre de lexèmes ''{3}'' descendant de ''{2}'' est {0}, il devrait être de {1} au minimum.
+descendant.token.max=Le nombre de lexèmes ''{3}'' descendant de ''{2}'' est {0}, il devrait être de {1} au maximum.
+
+final.parameter=Le paramètre {0} devrait être final.
+trailing.comments=Ne mélangez pas instructions Java et commentaires sur la même ligne.
+
diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/metrics/messages_fr.properties b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/metrics/messages_fr.properties
new file mode 100644
index 000000000..98b398065
--- /dev/null
+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/metrics/messages_fr.properties
@@ -0,0 +1,30 @@
+booleanExpressionComplexity=La complexité de l''expression booléenne est de {0,number,integer}, alors que le maximum autorisé est de {1,number,integer}.
+classDataAbstractionCoupling=Le DAC (Data Abstraction Coupling) de la classe est de {0,number,integer} alors que le maximum autorisé est de {1,number,integer}.
+classFanOutComplexity=Le Fan-Out Complexity de la classe est de {0,number,integer} alors que le maximum autorisé est de {1,number,integer}.
+cyclomaticComplexity=La complexité cyclomatique de la classe est de {0,number,integer} alors que le maximum autorisé est de {1,number,integer}.
+duplicateLiteral=Utiliser plusieurs fois la même chaîne littérale ''{0}'' est interdit.
+finalField=L''attribut ''{0}'' devrait être déclaré final.
+illegalAbstractClassName=Le nom ''{0}'' devrait respecter l''expression ''{1}''.
+illegalCatch=Il est interdit de catcher l''exception ''{0}''.
+illegalThrows=Il est interdit de déclarer l''exception ''{0}''.
+illegalToken=Il est interdit d''utiliser ''{0}''.
+illegalType=Il est interdit de déclarer des variables, valeurs de retour ou paramètres de type ''{0}''.
+junit.methodName=La méthode ''{0}'' devrait être renommée ''{1}''
+junit.methodParameters=La méthode ''{0}'' ne devrait pas comporter de paramètres.
+junit.methodPublicAndStatic=La méthode ''{0}'' devrait être statique.
+junit.methodPublicOrProtected=La méthode {0} devrait être protégée ou publique.
+junit.methodReturnType=La méthode ''{0}'' devrait avoir un type de retour \"void\".
+mutableException=L''attribut ''{0}'' devrait être déclaré final.
+nestedIfDepth=Le nombre de if imbriqués est de {0,number,integer} alors que le maximum autorisé est de {1,number,integer}.
+nestedTryDepth=Le nombre de try imbriqués est de {0,number,integer} alors que le maximum autorisé est de {1,number,integer}.
+npathComplexity=La complexité NPath est de {0,number,integer} alors que le maximum autorisé est de {1,number,integer}.
+packageDeclaration=Déclaration de package manquante.
+parameterAssignment=L''affectation du paramètre ''{0}'' est interdit.
+returnCount=Le nombre d''instructions return est de {0,number,integer} alors que le maximum autorisé est de {1,number,integer}.
+returnFromCatch=Il est interdit de placer une instruction \"return\" dans un bloc \"catch\".
+returnFromFinally=Il est interdit de placer une instruction \"return\" dans un bloc \"finally\".
+throwsCount=Le nombre d''exceptions déclaré est de {0,number,integer} alors que le maximum autorisé est de {1,number,integer}.
+unusedVariable=La variable ''{0}'' n''est jamais utilisée.
+ncss.method=La métrique NCSS pour cette méthode vaut {0,number,integer} alors que le maximum autorisé est de {1,number,integer}.
+ncss.class=La métrique NCSS pour cette classe vaut {0,number,integer} alors que le maximum autorisé est de {1,number,integer}.
+ncss.file=La métrique NCSS pour ce fichier vaut {0,number,integer} alors que le maximum autorisé est de {1,number,integer}.
diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/messages_fr.properties b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/messages_fr.properties
new file mode 100644
index 000000000..276742a46
--- /dev/null
+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/messages_fr.properties
@@ -0,0 +1,2 @@
+name.invalidPattern=Le nom de la classe ''{0}'' n''est pas conforme à l''expression ''{1}''.
+illegal.abstract.class.name=Le nom ''{0}'' n''est pas conforme à l''expression ''{1}''.
diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/sizes/messages_fr.properties b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/sizes/messages_fr.properties
new file mode 100644
index 000000000..388615d65
--- /dev/null
+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/sizes/messages_fr.properties
@@ -0,0 +1,7 @@
+executableStatementCount=Le nombre d''instructions est de {0,number,integer} alors que le maximum autorisé est de {1,number,integer}.
+maxLen.file=Le fichier contient {0,number,integer} lignes alors que le maximum autorisé est de {1,number,integer}.
+maxLen.method=La méthode contient {0,number,integer} lignes alors que le maximum autorisé est de {1,number,integer}.
+maxLen.anonInner=La classe interne anonyme contient {0,number,integer} lignes alors que le maximum autorisé est de {1,number,integer}.
+maxLineLen=La ligne excède {0,number,integer} caractères.
+maxParam=La méthode ou le constructeur a plus de {0,number,integer} paramètres.
+
diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/usage/messages_fr.properties b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/usage/messages_fr.properties
new file mode 100644
index 000000000..4b0efd34b
--- /dev/null
+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/usage/messages_fr.properties
@@ -0,0 +1,5 @@
+one.method.private.field=L''attribut privé ''{0}'' est utilisé dans une seule méthode.
+unused.local=Variable locale non utilisée ''{0}''.
+unused.parameter=Paramètre ''{0}'' inutilisé.
+unused.field=Attribut privé ''{0}'' inutilisé.
+unused.method=Méthode privée ''{0}'' inutilisée.