我在互联网上搜索了Yesod Web电子书和其他教程(Yesod Tutorial),但我无法澄清这个问题。我正在使用脚手架网站。
我有一个处理程序,里面会返回一个值,如果用户经过身份验证则是电子邮件,如果不是,则返回字符串。我想要的是返回本地化的消息而不是字符串“(未知的用户ID)”。我的问题是使用消息文件中的值(例如MsgHello),如果我这样做,它会返回如下错误:
无法匹配预期类型
AppMessage' with actual type
文字'
我尝试使用(显示MsgHello)或(打包MsgHello),甚至调用 msg< - 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")
答案 0 :(得分: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值并避免使用“msg MsgThisPageTitle”
答案 1 :(得分:2)
我对I18N
模块的理解是,您希望获取AppMessage
值并使用renderMessage
。
您需要传入指定翻译类型和语言列表以及消息的类型。翻译类型是使用mkMessage
函数创建的,语言列表类似于["en-US", "en-GB", "fr"]
。