Spring Boot集成Thymeleaf时乌克兰语日期月份本地化失效如何解决
问题根因
你之前的代码核心问题是乌克兰语的语言代码拼写错误:乌克兰语的ISO 639-1标准语言代码是uk,而非你写的ua(ua是乌克兰的国家代码),构造Locale时传错语言代码会导致系统找不到对应的本地化资源,自动回退到英文显示。
另外你混用了java.util.Date和java.time.LocalDate类型,#temporals是专门适配Java 8+时间API的工具类,你的实体类字段是java.util.Date类型,直接用#dates工具类格式化即可,不需要额外做类型转换。
可用解决方案
方案1:硬编码乌克兰语Locale(固定显示乌克兰语日期)
直接修正Locale构造参数,用#dates格式化原Date字段即可:
<td th:text="${#dates.format(tempReport.reportDate, 'dd-MMMM-yyyy HH:mm:ss', new java.util.Locale('uk', 'UA'))}"></td>
格式化后输出效果完全符合你的预期:10-квітня-2021 18:58:53
方案2:适配全局语言切换(随系统当前语言自动切换日期格式)
如果你的项目已经配置了全局Locale解析器,不需要硬编码Locale,直接传入上下文的#locale即可:
<td th:text="${#dates.format(tempReport.reportDate, 'dd-MMMM-yyyy HH:mm:ss', #locale)}"></td>
注意需要确保你项目的Locale切换逻辑中,乌克兰语对应的Locale实例构造正确,语言代码为uk、国家代码为UA。你可以加一行测试代码验证当前上下文的Locale是否正确:
<!-- 切换到乌克兰语时应该输出 uk_UA --> <td th:text="${#locale}"></td>
补充说明
Java的Locale类确实没有预置UKRAINIAN常量,手动构造new Locale("uk", "UA")是标准用法,不需要依赖预置常量也能正常生效。
内容的提问来源于stack exchange,提问作者 skipper
相关产品推荐
相关产品推荐

