我无法使用生成的网站(yesod init)来使用I18N。具体来说,我正在尝试使用_{Msg...}
在生成的default-layout-wrapper.hamlet文件中使用本地化字符串。我已经改变了Foundation.hs来说:
ihamletToRepHtml $(ihamletFile "templates/default-layout-wrapper.hamlet")
但是我收到以下错误:
The function `pageHead' is applied to three arguments,
but its type `PageContent url0 -> HtmlUrl url0' has only two
In a stmt of a 'do' expression:
pageHead pc _mrender[a522] _urender[a521]
我没有触及创建的页面内容:
pc <- widgetToPageContent $ do
$(widgetFile "normalize")
addStylesheet $ StaticR css_bootstrap_css
$(widgetFile "default-layout")
所以看起来我需要调整pclet创建代码或者哈希模板中的调用代码(例如<title>#{pageTitle pc}
所示的代码),但是我不知道怎么做,并且通过API文档和各种教程和博客文章没有给我一个答案(它可能在那里,但我错过了它。)
有什么想法吗? 谢谢!
答案 0 :(得分:2)
我认为你可以定义一个函数:
toHtmlUrlI hu _msgRender urlRender = hu urlRender
然后在default-layout-wrapper.hamlet
中,将pageHead
的嵌入替换为:
^{toHtmlUrlI $ pageHead pc}
发生的事情是,因为您使用的是ihamlet,所以嵌入式模板应该是类型:
type HtmlUrlI18n msg url = Translate msg -> Render url -> Html
但是,pageHead pc
实际上是类型:
type HtmlUrl url = Render url -> Html
所以你必须忽略Translate msg
参数。
顺便说一句,我认为您可以使用const
代替toHtmlUrlI
,但我发现后者更清晰一些。