【问题标题】:Hamlet file and 18N哈姆雷特文件和 18N
【发布时间】:2012-06-01 16:58:08
【问题描述】:

我在调整生成的站点 (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")

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

有什么想法吗? 谢谢!

【问题讨论】:

    标签: yesod


    【解决方案1】:

    我认为您可以定义如下函数:

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

    【讨论】:

    • 好的,成功了!我有点像认为它是那样的......看起来很奇怪的是我看到忽略翻译参数,即使内容也将被本地化。我觉得 I18N 并没有像它应该的那样集成。
    猜你喜欢
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 2012-01-03
    相关资源
    最近更新 更多