如何在 Yesod 中切换语言?

问题描述 投票:0回答:1

我想在我的页面上添加一个按钮,上面写着“EN/PL”,按下时它会使用另一种语言重新加载页面(一个按钮执行 PL -> EN 或 EN -> PL,具体取决于当前的语言选择)。问题是我找不到任何方法来查询当前的语言设置,因此我无法告诉程序要切换到哪种语言。我尝试在 hackage、hoogle 和 Yesod 书中查找,但只能找到 setLanguage,似乎没有相应的 getLanguage 函数。

是否可以在 Yesod 中查询当前的语言设置,或者是否有其他方法来实现这样的按钮?

haskell deployment yesod
1个回答
0
投票

我设法部分解决了问题,但它仍然无法按预期工作。

在 pl.msg 中:

OtherLang: en

在 en.msg 中:

OtherLang: pl

以及设置语言的路线就像书中那样

mkYesod "App" [parseRoute|
    /lang/#Text LangR GET

    ...
|]

getLangR :: Text -> Handler ()
getLangR lang = do
    setLanguage lang
    redirect HomeR

然后,如果我致电

renderMessage "App" [ "en" "pl" ] OtherLang
,它会向我提供未使用的语言,我可以通过
@{LangR lang}
传递它。

检查生成的 HTML 后,我发现 Yesod 正确生成了英语站点的链接

localhost/lang/pl
和波兰语站点的链接
localhost/lang/en
。现在的问题是,如果我在开发人员工具中按下此链接或在地址栏中输入它,它会成功更改语言,但当我按下按钮本身时什么也不会发生。

似乎是

redirect
本身的问题?

© www.soinside.com 2019 - 2024. All rights reserved.