【问题标题】:Thymeleaf: Switch statement for a language selectorThymeleaf:语言选择器的切换语句
【发布时间】:2017-07-26 13:09:48
【问题描述】:

我正在为 Spring Boot 项目使用 Thymeleaf 实现语言选择器,但我无法让变量 ${#ctx.locale} 在案例语句中工作。它始终采用默认值 ("*")。

<li class="nav-item dropdown">
<a class="nav dropdown-toggle"
   id="languages" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">

        <i class="material-icons">language</i>

        <div th:switch="${#ctx.locale}">
            <p th:case="en">English</p>
            <p th:case="es">Español</p>
            <p th:case="ca">Català</p>
            <p th:case="*">English</p>
        </div>
</a>
<div class="dropdown-menu" aria-labelledby="languages">
    <a class="dropdown-item" th:href="@{?lang=en}">English</a>
    <a class="dropdown-item" th:href="@{?lang=es}">Español</a>
    <a class="dropdown-item" th:href="@{?lang=ca}">Català</a>
</div>

事实上,我只需要语言名称。谢谢。

【问题讨论】:

  • 您是否在视图中验证了 ctx.locale 等于 "en", "es", "ca", 等?如果它总是到达"*",那么它可能不是。这就是“不工作”的意思吗?
  • 这段代码摘录,属于导航栏,设置成片段(
    )。我已经在其中一个带有导航栏的页面中对其进行了测试,从以下位置打印文本:${#ctx.locale},它显示了正确的语言环境(en、es 或 ca),但在切换时总是默认的一个(

    英语

    )。我也测试了其他语法

    Español

    具有相同的结果。
  • 我见过一些案例也用单引号括起来。所以"'en'" vs "en"
  • 谢谢 Gregg,我也试过了,也没有成功。我可能错过了一些东西,但我不知道是什么。也许我应该考虑改用 FreeMarker,因为我仍处于开发的早期阶段。

标签: spring-boot thymeleaf


【解决方案1】:

解释在这里:thymeleaf-compare-locale-expression-object-with-string

在您的代码更改th:switch="${#ctx.locale}" to th:switch="__${#locale.language}__"

<div th:switch="__${#locale.language}__">
    <p th:case="en">English</p>
    <p th:case="es">Español</p>
    <p th:case="ca">Català</p>
    <p th:case="*">English</p>
</div>

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签