diff --git a/Yesod/Form.hs b/Yesod/Form.hs
--- a/Yesod/Form.hs
+++ b/Yesod/Form.hs
@@ -9,6 +9,6 @@
 
 import Yesod.Form.Types
 import Yesod.Form.Functions
-import Yesod.Form.Fields
+import Yesod.Form.Fields hiding (FormMessage (..))
 import Yesod.Form.Class
 import Yesod.Form.Input
diff --git a/Yesod/Form/Fields.hs b/Yesod/Form/Fields.hs
--- a/Yesod/Form/Fields.hs
+++ b/Yesod/Form/Fields.hs
@@ -34,6 +34,7 @@
     ) where
 
 import Yesod.Form.Types
+import Yesod.Form.I18n.English
 import Yesod.Widget
 import Yesod.Message (RenderMessage (renderMessage), SomeMessage (..))
 import Text.Hamlet
@@ -58,7 +59,6 @@
 import qualified Data.ByteString.Lazy as L
 import Data.Text (Text, unpack, pack)
 import qualified Data.Text.Read
-import Data.Monoid (mappend)
 import Control.Monad.IO.Class (liftIO)
 
 import Control.Applicative ((<$>))
@@ -80,44 +80,9 @@
 #define HTML $html
 #endif
 
-data FormMessage = MsgInvalidInteger Text
-                 | MsgInvalidNumber Text
-                 | MsgInvalidEntry Text
-                 | MsgInvalidUrl Text
-                 | MsgInvalidEmail Text
-                 | MsgInvalidTimeFormat
-                 | MsgInvalidHour Text
-                 | MsgInvalidMinute Text
-                 | MsgInvalidSecond Text
-                 | MsgInvalidDay
-                 | MsgCsrfWarning
-                 | MsgValueRequired
-                 | MsgInputNotFound Text
-                 | MsgSelectNone
-                 | MsgInvalidBool Text
-                 | MsgBoolYes
-                 | MsgBoolNo
-                 | MsgDelete
 
 defaultFormMessage :: FormMessage -> Text
-defaultFormMessage (MsgInvalidInteger t) = "Invalid integer: " `mappend` t
-defaultFormMessage (MsgInvalidNumber t) = "Invalid number: " `mappend` t
-defaultFormMessage (MsgInvalidEntry t) = "Invalid entry: " `mappend` t
-defaultFormMessage MsgInvalidTimeFormat = "Invalid time, must be in HH:MM[:SS] format"
-defaultFormMessage MsgInvalidDay = "Invalid day, must be in YYYY-MM-DD format"
-defaultFormMessage (MsgInvalidUrl t) = "Invalid URL: " `mappend` t
-defaultFormMessage (MsgInvalidEmail t) = "Invalid e-mail address: " `mappend` t
-defaultFormMessage (MsgInvalidHour t) = "Invalid hour: " `mappend` t
-defaultFormMessage (MsgInvalidMinute t) = "Invalid minute: " `mappend` t
-defaultFormMessage (MsgInvalidSecond t) = "Invalid second: " `mappend` t
-defaultFormMessage MsgCsrfWarning = "As a protection against cross-site request forgery attacks, please confirm your form submission."
-defaultFormMessage MsgValueRequired = "Value is required"
-defaultFormMessage (MsgInputNotFound t) = "Input not found: " `mappend` t
-defaultFormMessage MsgSelectNone = "<None>"
-defaultFormMessage (MsgInvalidBool t) = "Invalid boolean: " `mappend` t
-defaultFormMessage MsgBoolYes = "Yes"
-defaultFormMessage MsgBoolNo = "No"
-defaultFormMessage MsgDelete = "Delete?"
+defaultFormMessage = englishFormMessage
 
 blank :: (Monad m, RenderMessage master FormMessage)
       => (Text -> Either FormMessage a) -> [Text] -> m (Either (SomeMessage master) (Maybe a))
@@ -454,7 +419,7 @@
             { fvLabel = toHtml $ renderMessage master langs $ fsLabel fs
             , fvTooltip = fmap (toHtml . renderMessage master langs) $ fsTooltip fs
             , fvId = id'
-            , fvInput = [whamlet|
+            , fvInput = [WHAMLET|
 <input type=file name=#{name} ##{id'}>
 |]
             , fvErrors = errs
@@ -483,7 +448,7 @@
             { fvLabel = toHtml $ renderMessage master langs $ fsLabel fs
             , fvTooltip = fmap (toHtml . renderMessage master langs) $ fsTooltip fs
             , fvId = id'
-            , fvInput = [whamlet|
+            , fvInput = [WHAMLET|
 <input type=file name=#{name} ##{id'}>
 |]
             , fvErrors = errs
diff --git a/Yesod/Form/Functions.hs b/Yesod/Form/Functions.hs
--- a/Yesod/Form/Functions.hs
+++ b/Yesod/Form/Functions.hs
@@ -34,7 +34,6 @@
     ) where
 
 import Yesod.Form.Types
-import Yesod.Form.Fields (FormMessage (MsgCsrfWarning, MsgValueRequired))
 import Data.Text (Text, pack)
 import Control.Monad.Trans.RWS (ask, get, put, runRWST, tell, evalRWST)
 import Control.Monad.Trans.Class (lift)
diff --git a/Yesod/Form/I18n/English.hs b/Yesod/Form/I18n/English.hs
new file mode 100644
--- /dev/null
+++ b/Yesod/Form/I18n/English.hs
@@ -0,0 +1,26 @@
+{-# LANGUAGE OverloadedStrings #-}
+module Yesod.Form.I18n.English where
+
+import Yesod.Form.Types (FormMessage (..))
+import Data.Monoid (mappend)
+import Data.Text (Text)
+
+englishFormMessage :: FormMessage -> Text
+englishFormMessage (MsgInvalidInteger t) = "Invalid integer: " `mappend` t
+englishFormMessage (MsgInvalidNumber t) = "Invalid number: " `mappend` t
+englishFormMessage (MsgInvalidEntry t) = "Invalid entry: " `mappend` t
+englishFormMessage MsgInvalidTimeFormat = "Invalid time, must be in HH:MM[:SS] format"
+englishFormMessage MsgInvalidDay = "Invalid day, must be in YYYY-MM-DD format"
+englishFormMessage (MsgInvalidUrl t) = "Invalid URL: " `mappend` t
+englishFormMessage (MsgInvalidEmail t) = "Invalid e-mail address: " `mappend` t
+englishFormMessage (MsgInvalidHour t) = "Invalid hour: " `mappend` t
+englishFormMessage (MsgInvalidMinute t) = "Invalid minute: " `mappend` t
+englishFormMessage (MsgInvalidSecond t) = "Invalid second: " `mappend` t
+englishFormMessage MsgCsrfWarning = "As a protection against cross-site request forgery attacks, please confirm your form submission."
+englishFormMessage MsgValueRequired = "Value is required"
+englishFormMessage (MsgInputNotFound t) = "Input not found: " `mappend` t
+englishFormMessage MsgSelectNone = "<None>"
+englishFormMessage (MsgInvalidBool t) = "Invalid boolean: " `mappend` t
+englishFormMessage MsgBoolYes = "Yes"
+englishFormMessage MsgBoolNo = "No"
+englishFormMessage MsgDelete = "Delete?"
diff --git a/Yesod/Form/I18n/Swedish.hs b/Yesod/Form/I18n/Swedish.hs
new file mode 100644
--- /dev/null
+++ b/Yesod/Form/I18n/Swedish.hs
@@ -0,0 +1,26 @@
+{-# LANGUAGE OverloadedStrings #-}
+module Yesod.Form.I18n.Swedish where
+
+import Yesod.Form.Types (FormMessage (..))
+import Data.Monoid (mappend)
+import Data.Text (Text)
+
+swedishFormMessage :: FormMessage -> Text
+swedishFormMessage (MsgInvalidInteger t) = "Ogiltigt antal: " `mappend` t
+swedishFormMessage (MsgInvalidNumber t) = "Ogiltigt nummer: " `mappend` t
+swedishFormMessage (MsgInvalidEntry t) = "Invalid entry: " `mappend` t
+swedishFormMessage MsgInvalidTimeFormat = "Ogiltigt klockslag, måste vara på formatet HH:MM[:SS]"
+swedishFormMessage MsgInvalidDay = "Ogiltigt datum, måste vara på formatet ÅÅÅÅ-MM-DD"
+swedishFormMessage (MsgInvalidUrl t) = "Ogiltig URL: " `mappend` t
+swedishFormMessage (MsgInvalidEmail t) = "Ogiltig epostadress: " `mappend` t
+swedishFormMessage (MsgInvalidHour t) = "Ogiltig timme: " `mappend` t
+swedishFormMessage (MsgInvalidMinute t) = "Ogiltig minut: " `mappend` t
+swedishFormMessage (MsgInvalidSecond t) = "Ogiltig sekund: " `mappend` t
+swedishFormMessage MsgValueRequired = "Fältet är obligatoriskt"
+swedishFormMessage (MsgInputNotFound t) = "Fältet hittades ej: " `mappend` t
+swedishFormMessage MsgSelectNone = "<Ingenting>"
+swedishFormMessage (MsgInvalidBool t) = "Ogiltig boolesk: " `mappend` t
+swedishFormMessage MsgBoolYes = "Ja"
+swedishFormMessage MsgBoolNo = "Nej"
+swedishFormMessage MsgDelete = "Radera?"
+swedishFormMessage MsgCsrfWarning = "Som skydd mot \"cross-site request forgery\" attacker, vänligen bekräfta skickandet av formuläret."
diff --git a/Yesod/Form/Input.hs b/Yesod/Form/Input.hs
--- a/Yesod/Form/Input.hs
+++ b/Yesod/Form/Input.hs
@@ -9,7 +9,6 @@
     ) where
 
 import Yesod.Form.Types
-import Yesod.Form.Fields (FormMessage (MsgInputNotFound))
 import Data.Text (Text)
 import Control.Applicative (Applicative (..))
 import Yesod.Handler (GHandler, GGHandler, invalidArgs, runRequestBody, getRequest, getYesod, liftIOHandler)
diff --git a/Yesod/Form/MassInput.hs b/Yesod/Form/MassInput.hs
--- a/Yesod/Form/MassInput.hs
+++ b/Yesod/Form/MassInput.hs
@@ -11,7 +11,7 @@
 
 import Yesod.Form.Types
 import Yesod.Form.Functions
-import Yesod.Form.Fields (boolField, FormMessage (MsgDelete))
+import Yesod.Form.Fields (boolField)
 import Yesod.Widget (GWidget, whamlet)
 import Yesod.Message (RenderMessage)
 import Yesod.Handler (newIdent, GGHandler)
diff --git a/Yesod/Form/Types.hs b/Yesod/Form/Types.hs
--- a/Yesod/Form/Types.hs
+++ b/Yesod/Form/Types.hs
@@ -5,6 +5,7 @@
     ( -- * Helpers
       Enctype (..)
     , FormResult (..)
+    , FormMessage (..)
     , Env
     , FileEnv
     , Ints (..)
@@ -121,3 +122,22 @@
                 -> Bool
                 -> GWidget sub master ()
     }
+
+data FormMessage = MsgInvalidInteger Text
+                 | MsgInvalidNumber Text
+                 | MsgInvalidEntry Text
+                 | MsgInvalidUrl Text
+                 | MsgInvalidEmail Text
+                 | MsgInvalidTimeFormat
+                 | MsgInvalidHour Text
+                 | MsgInvalidMinute Text
+                 | MsgInvalidSecond Text
+                 | MsgInvalidDay
+                 | MsgCsrfWarning
+                 | MsgValueRequired
+                 | MsgInputNotFound Text
+                 | MsgSelectNone
+                 | MsgInvalidBool Text
+                 | MsgBoolYes
+                 | MsgBoolNo
+                 | MsgDelete
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:         0.3.2
+version:         0.3.2.1
 license:         BSD3
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
@@ -42,6 +42,8 @@
                      Yesod.Form.Jquery
                      Yesod.Form.Nic
                      Yesod.Form.MassInput
+                     Yesod.Form.I18n.English
+                     Yesod.Form.I18n.Swedish
                      -- FIXME Yesod.Helpers.Crud
     ghc-options:     -Wall
 
