哈姆雷特文件和18N

时间:2012-06-01 16:58:08

标签: yesod

我无法使用生成的网站(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文档和各种教程和博客文章没有给我一个答案(它可能在那里,但我错过了它。)

有什么想法吗? 谢谢!

1 个答案:

答案 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,但我发现后者更清晰一些。