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")

そのため、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 に答える