首页 > 解决方案 > 如何在 Thymeleaf 中使用#locale

问题描述

如何在 Map 对象中获取我的语言环境的正确值?

地图

"greeting": {
    "en_US": "Hi"
   , "ko_KR": "Hello"
}

我已经这样做了,但它太糟糕了。

$ {greeting.get (__${#locale} __)}

标签: thymeleaf

解决方案


欢迎来到 SO。

想法是您没有正确地遍历地图的值。假设您正在向模型添加一个名为的属性,以下内容可以为您提供一些指导greeting。看来您有一个地图作为另一个对象的属性,我假设它是一个List. 我还将假设您正在尝试使用当前的语言环境。

<th:block th:each="item : ${greeting}">

    <th:block th:each="map : ${item}">

        <th:block th:text="${#strings.equals(#locale, map.key) ? map.value : ''}">Value</th:block>

    </th:block>

</th:block>

您可以使用此示例服务器端代码进行测试:

    Map<String, String> map = new HashMap<>(2);

    map.put("en_US", "Hi");
    map.put("ko_KR", "Hello");

    List container = new ArrayList(1);
    container.add(map);
    model.addAttribute("greeting", container);

请注意,如果您使用的是 Spring,您将希望使用messages.properties每个语言环境来进行国际化。它会让你的生活更轻松,并且会更好地遵循 Spring 的约定。


推荐阅读