diff --git a/yesod-form/Yesod/Form/Fields.hs b/yesod-form/Yesod/Form/Fields.hs index a4146d33..10b7ad06 100644 --- a/yesod-form/Yesod/Form/Fields.hs +++ b/yesod-form/Yesod/Form/Fields.hs @@ -4,8 +4,7 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} module Yesod.Form.Fields - ( FormMessage (..) - , defaultFormMessage + ( defaultFormMessage , textField , passwordField , textareaField @@ -29,6 +28,7 @@ module Yesod.Form.Fields ) where import Yesod.Form.Types +import Yesod.Form.I18n.English import Yesod.Widget import Yesod.Message (RenderMessage, SomeMessage (..)) import Text.Hamlet @@ -53,7 +53,6 @@ import qualified Data.ByteString as S import qualified Data.ByteString.Lazy as L import Data.Text (Text, unpack, pack) import qualified Data.Text.Read -import Data.Monoid (mappend) #if __GLASGOW_HASKELL__ >= 700 #define WHAMLET whamlet @@ -69,44 +68,9 @@ import Data.Monoid (mappend) #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 = "" -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)) diff --git a/yesod-form/Yesod/Form/Functions.hs b/yesod-form/Yesod/Form/Functions.hs index f1904f92..3c51c81a 100644 --- a/yesod-form/Yesod/Form/Functions.hs +++ b/yesod-form/Yesod/Form/Functions.hs @@ -34,7 +34,6 @@ module Yesod.Form.Functions ) 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/Yesod/Form/I18n/English.hs b/yesod-form/Yesod/Form/I18n/English.hs new file mode 100644 index 00000000..f13ca683 --- /dev/null +++ b/yesod-form/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 = "" +englishFormMessage (MsgInvalidBool t) = "Invalid boolean: " `mappend` t +englishFormMessage MsgBoolYes = "Yes" +englishFormMessage MsgBoolNo = "No" +englishFormMessage MsgDelete = "Delete?" diff --git a/yesod-form/Yesod/Form/Input.hs b/yesod-form/Yesod/Form/Input.hs index 45c742c4..34abd57a 100644 --- a/yesod-form/Yesod/Form/Input.hs +++ b/yesod-form/Yesod/Form/Input.hs @@ -9,7 +9,6 @@ module Yesod.Form.Input ) 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/Yesod/Form/MassInput.hs b/yesod-form/Yesod/Form/MassInput.hs index f15bac0c..3a3eae40 100644 --- a/yesod-form/Yesod/Form/MassInput.hs +++ b/yesod-form/Yesod/Form/MassInput.hs @@ -11,7 +11,7 @@ module Yesod.Form.MassInput 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/Yesod/Form/Types.hs b/yesod-form/Yesod/Form/Types.hs index f5f87345..c84743fd 100644 --- a/yesod-form/Yesod/Form/Types.hs +++ b/yesod-form/Yesod/Form/Types.hs @@ -5,6 +5,7 @@ module Yesod.Form.Types ( -- * Helpers Enctype (..) , FormResult (..) + , FormMessage (..) , Env , FileEnv , Ints (..) @@ -121,3 +122,22 @@ data Field sub master a = Field -> 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/yesod-form.cabal b/yesod-form/yesod-form.cabal index b3257ffb..c726c62e 100644 --- a/yesod-form/yesod-form.cabal +++ b/yesod-form/yesod-form.cabal @@ -42,6 +42,7 @@ library Yesod.Form.Jquery Yesod.Form.Nic Yesod.Form.MassInput + Yesod.Form.I18n.English -- FIXME Yesod.Helpers.Crud ghc-options: -Wall