2013-03-21 71 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「