diff --git a/Yesod/Form/Fields.hs b/Yesod/Form/Fields.hs
--- a/Yesod/Form/Fields.hs
+++ b/Yesod/Form/Fields.hs
@@ -76,7 +76,7 @@
 import Yesod.Handler (newIdent, lift)
 import Yesod.Request (FileInfo)
 
-import Yesod.Core (toPathPiece, GHandler, PathPiece)
+import Yesod.Core (toPathPiece, GHandler, PathPiece, fromPathPiece)
 import Yesod.Persist (selectList, runDB, Filter, SelectOpt, YesodPersistBackend, Key, YesodPersist, PersistEntity, PersistQuery)
 import Control.Arrow ((&&&))
 
@@ -146,7 +146,7 @@
 htmlField = Field
     { fieldParse = blank $ Right . preEscapedText . sanitizeBalance
     , fieldView = \theId name attrs val _isReq -> toWidget [hamlet|
-        -- FIXME: There was a class="html" attribute, for what purpose?
+$# FIXME: There was a class="html" attribute, for what purpose?
 <textarea id="#{theId}" name="#{name}" *{attrs}>#{showVal val}
 |]
     }
@@ -178,11 +178,12 @@
 |]
     }
 
-hiddenField :: RenderMessage master FormMessage => Field sub master Text
+hiddenField :: (PathPiece p, RenderMessage master FormMessage)
+            => Field sub master p
 hiddenField = Field
-    { fieldParse = blank $ Right
+    { fieldParse = blank $ maybe (Left MsgValueRequired) Right . fromPathPiece
     , fieldView = \theId name attrs val _isReq -> toWidget [hamlet|
-<input type="hidden" id="#{theId}" name="#{name}" *{attrs} value="#{either id id val}">
+<input type="hidden" id="#{theId}" name="#{name}" *{attrs} value="#{either id toPathPiece val}">
 |]
     }
 
diff --git a/Yesod/Form/Functions.hs b/Yesod/Form/Functions.hs
--- a/Yesod/Form/Functions.hs
+++ b/Yesod/Form/Functions.hs
@@ -346,8 +346,8 @@
 (const $ Left msg) Right) $ fieldParse field ts }
 
 -- | Generate a 'FieldSettings' from the given label.
-fieldSettingsLabel :: SomeMessage master -> FieldSettings master
-fieldSettingsLabel msg = FieldSettings msg Nothing Nothing Nothing []
+fieldSettingsLabel :: RenderMessage master msg => msg -> FieldSettings master
+fieldSettingsLabel msg = FieldSettings (SomeMessage msg) Nothing Nothing Nothing []
 
 -- | Generate an 'AForm' that gets its value from the given action.
 aformM :: GHandler sub master a -> AForm sub master a
diff --git a/Yesod/Form/I18n/French.hs b/Yesod/Form/I18n/French.hs
new file mode 100644
--- /dev/null
+++ b/Yesod/Form/I18n/French.hs
@@ -0,0 +1,26 @@
+{-# LANGUAGE OverloadedStrings #-}
+module Yesod.Form.I18n.French (frenchFormMessage) where
+
+import Yesod.Form.Types (FormMessage (..))
+import Data.Monoid (mappend)
+import Data.Text (Text)
+
+frenchFormMessage :: FormMessage -> Text
+frenchFormMessage (MsgInvalidInteger t) = "Entier invalide : " `mappend` t
+frenchFormMessage (MsgInvalidNumber t) = "Nombre invalide : " `mappend` t
+frenchFormMessage (MsgInvalidEntry t) = "Entrée invalide : " `mappend` t
+frenchFormMessage MsgInvalidTimeFormat = "Heure invalide (elle doit être au format HH:MM ou HH:MM:SS"
+frenchFormMessage MsgInvalidDay = "Date invalide (elle doit être au format AAAA-MM-JJ"
+frenchFormMessage (MsgInvalidUrl t) = "Adresse Internet invalide : " `mappend` t
+frenchFormMessage (MsgInvalidEmail t) = "Adresse électronique invalide : " `mappend` t
+frenchFormMessage (MsgInvalidHour t) = "Heure invalide : " `mappend` t
+frenchFormMessage (MsgInvalidMinute t) = "Minutes invalides : " `mappend` t
+frenchFormMessage (MsgInvalidSecond t) = "Secondes invalides  " `mappend` t
+frenchFormMessage MsgCsrfWarning = "Afin d'empêcher les attaques CSRF, veuillez ré-envoyer ce formulaire"
+frenchFormMessage MsgValueRequired = "Ce champ est requis"
+frenchFormMessage (MsgInputNotFound t) = "Entrée non trouvée : " `mappend` t
+frenchFormMessage MsgSelectNone = "<Rien>"
+frenchFormMessage (MsgInvalidBool t) = "Booléen invalide : " `mappend` t
+frenchFormMessage MsgBoolYes = "Oui"
+frenchFormMessage MsgBoolNo = "Non"
+frenchFormMessage MsgDelete = "Détruire ?"
diff --git a/yesod-form.cabal b/yesod-form.cabal
--- a/yesod-form.cabal
+++ b/yesod-form.cabal
@@ -1,5 +1,5 @@
 name:            yesod-form
-version:         1.0.0.1
+version:         1.0.0.2
 license:         MIT
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
@@ -46,6 +46,7 @@
                      Yesod.Form.I18n.Portuguese
                      Yesod.Form.I18n.Swedish
                      Yesod.Form.I18n.German
+                     Yesod.Form.I18n.French
                      -- FIXME Yesod.Helpers.Crud
     ghc-options:     -Wall
 
