2013-03-21 23 views
3

我已经在网上搜索,在Yesod网上电子书和其他教程(Yesod Tutorial),但我一直无法澄清这个问题。我正在使用脚手架网站。它如何在Haskell文件中使用翻译的消息?

我有一个处理程序,它内部返回一个值,电子邮件,如果用户身份验证或字符串,如果他不是。我想要的是返回本地化的消息,而不是字符串“(未知的用户ID)”。我的问题是从消息文件(EX MsgHello)使用的值,如果我这样做,它会返回错误一样:

无法比拟预期型AppMessage' with actual type文本”

我有使用(显示MsgHello)(包MsgHello),甚至称味精<尝试 - getMessageRender,但我一直没能做到我所期望的。如果您有任何建议,欢迎。

谢谢!

PD:这是我的工作,行代码的一部分:

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

回答

2

我的I18N模块的理解是,你想利用你的AppMessage值并在其上使用renderMessage

您需要传入一个类型来指定您的翻译类型和语言列表以及您的消息。翻译类型使用mkMessage函数创建,语言列表看起来像["en-US", "en-GB", "fr"]

3

感谢Tickhon Jelvis指出这些网页,我也发现了这一个:Poly Hamlet i18n我在那里得到了解决问题的方法。

所以,如果我想用一个本地化的消息,我会做:

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") 

还记得有一个辅助功能“setTitleI”直接取消息值,并避免使用“ msg MsgThisPageTitle“