我想在我的页面上添加一个按钮,上面写着“EN/PL”,按下时它会使用另一种语言重新加载页面(一个按钮执行 PL -> EN 或 EN -> PL,具体取决于当前的语言选择)。问题是我找不到任何方法来查询当前的语言设置,因此我无法告诉程序要切换到哪种语言。我尝试在 hackage、hoogle 和 Yesod 书中查找,但只能找到 setLanguage,似乎没有相应的 getLanguage 函数。
是否可以在 Yesod 中查询当前的语言设置,或者是否有其他方法来实现这样的按钮?
我设法部分解决了问题,但它仍然无法按预期工作。
在 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
本身的问题?