如何在Haskell文件中使用翻译后的消息?

如何在Haskell文件中使用翻译后的消息?,haskell,internationalization,yesod,Haskell,Internationalization,Yesod,我在互联网上搜索过,在Yesod网络电子书和其他教程()中也搜索过,但我还不能澄清这个问题。我在用脚手架搭建的场地 我有一个处理程序,里面返回一个值,如果用户通过身份验证,则返回电子邮件,如果用户未通过身份验证,则返回字符串。我想要的是返回本地化消息,而不是字符串“(未知用户ID)”。我的问题是使用消息文件(例如MsgHello)中的值,如果我这样做,它将返回如下错误: 无法将预期类型AppMessage'与实际类型匹配 我试过使用(show MsgHello)或(pack MsgHello),

我在互联网上搜索过,在Yesod网络电子书和其他教程()中也搜索过,但我还不能澄清这个问题。我在用脚手架搭建的场地

我有一个处理程序,里面返回一个值,如果用户通过身份验证,则返回电子邮件,如果用户未通过身份验证,则返回字符串。我想要的是返回本地化消息,而不是字符串“(未知用户ID)”。我的问题是使用消息文件(例如MsgHello)中的值,如果我这样做,它将返回如下错误:

无法将预期类型
AppMessage'与实际类型匹配

我试过使用(show MsgHello)(pack MsgHello),甚至打电话给msg userEmail u 默认布局$do setTitleI MsgUserProfile $(widgetFile“nhUserProfile”)
我对
I18N
模块的理解是,您希望获取您的
AppMessage
值并在其上使用


您需要传入指定翻译类型的类型、语言列表以及消息。翻译类型是使用该函数创建的,语言列表类似于
[“en-US”,“en-GB”,“fr”]

感谢Tickhon Jelvis指出这些网页,我还发现了这一个:在那里我能够找到问题的解决方案

因此,如果我想使用本地化消息,我会:

getUserProfileR :: Handler RepHtml
getUserProfileR = do        
    maid <- maybeAuth
    msg <- getRenderMessage
    let user = case maid of
                    Nothing -> msg MsgNoUser --"(Unknown User ID)"
                    Just (Entity _ u) -> userEmail u
    defaultLayout $ do
        setTitleI MsgUserProfile
        $(widgetFile "nhUserProfile")
getUserProfileR::Handler RepHtml
getUserProfileR=do
女佣用户电子邮件
默认布局$do
setTitleI MsgUserProfile
$(widgetFile“nhUserProfile”)
还请记住,有一个助手函数“setTitleI”,它直接获取一个Msg值,并避免使用“Msg MsgThisPageTitle”

getUserProfileR :: Handler RepHtml
getUserProfileR = do        
    maid <- maybeAuth
    msg <- getRenderMessage
    let user = case maid of
                    Nothing -> msg MsgNoUser --"(Unknown User ID)"
                    Just (Entity _ u) -> userEmail u
    defaultLayout $ do
        setTitleI MsgUserProfile
        $(widgetFile "nhUserProfile")