3

我无法调整生成的站点(yesod init)以使用 I18N。具体来说,我正在尝试在生成的 default-layout-wrapper.hamlet 文件中使用本地化字符串,使用_{Msg...}. 我已将 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")

所以看起来我需要在 hamlet 模板中调整 pc 创建代码或调用代码(例如代码<title>#{pageTitle pc}),但我不知道如何,并且通过 API 文档和各种教程和博客文章没有给我答案(它可能在那里,但我错过了)。

任何的想法?谢谢!

4

1 回答 1

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

于 2012-06-02T21:13:34.833 回答