我在调整生成的站点(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")因此,看起来我需要调整pc创建代码或hamlet模板中的调用代码(例如<title>#{pageTitle pc}的代码),但我不知道如何调整,并且浏览了API文档、各种教程和博客帖子都没有给我答案(它可能在那里,但我错过了它)。
有什么想法吗?谢谢!
发布于 2012-06-03 05:13:35
我认为你可以像这样定义一个函数:
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,但我发现后者更清晰一些。
https://stackoverflow.com/questions/10854467
复制相似问题