【发布时间】:2014-10-08 01:36:08
【问题描述】:
我使用checkBool helper 来构建自定义表单字段,例如:
posDoubleField :: forall msg (m :: * -> *).
( RenderMessage (HandlerSite m) FormMessage
, RenderMessage (HandlerSite m) msg, Monad m )
=> msg -> Field m Double
posDoubleField msg = checkBool (> 0) msg doubleField
-- ...
mkDepForm :: Form FormDepositHelper
mkDepForm = renderDivs $ FormDepositHelper
<$> areq (posDoubleField errMsg) (fieldSettingsLabel MsgDepositAmount) (Just 0)
where
errMsg :: Text
errMsg = "Invalid deposit amount!"
如你所见,我有国际化的字段标签,我也可以使用国际化的错误信息吗?还是我必须按照source code example 自己构建整个领域?
【问题讨论】:
-
简单地使用 i18n 值代替
errMsg是否行不通?所有类型似乎都适合这一点。 -
太棒了!这行得通,但我不明白为什么,更准确地说它是如何工作的。
-
我现在正在使用手机,所以无法详细回答。查看 RenderMessage 类型类的定义,它在 yesod 中提供了 i18n 的核心。书中还有一章是关于它的。
-
我仍然在 Haskell 世界中“漂浮”,所以不幸的是,我阅读了更多我理解的内容 :( 实际上,在提出问题之前,我总是重读 Yesod 书和其他已知示例。非常感谢,你是非常愉快!我需要深入了解 Haskell 本身,尤其是 monad 转换器,因为据我了解 Yesod 通常是使用 monad 转换器构建的。
-
@MichaelSnoyman,您能否发布一个答案,以便我将问题标记为已回答,或者如果您太忙,我可以自己做。
标签: forms haskell internationalization messages yesod