首页 > 解决方案 > 为什么有些语言环境即使可用也不起作用?

问题描述

我面临一个奇怪的情况:当我尝试本地化日期时,某些语言正在工作,而其他一些语言却没有,即使当我Locale.getAvailableLocales()用来获取所有可用语言环境的列表时它们都显示出来。例如:

import java.time.Month
import java.time.format.TextStyle
import java.util.Locale

println(Month.of(3).getDisplayName(TextStyle.FULL_STANDALONE, new Locale("it")));
println(Month.of(3).getDisplayName(TextStyle.FULL_STANDALONE, new Locale("en"))); // doesn't work
println(Month.of(3).getDisplayName(TextStyle.FULL_STANDALONE, new Locale("fr"))); // doesn't work
println(Month.of(3).getDisplayName(TextStyle.FULL_STANDALONE, new Locale("es"))); // doesn't work
println(Month.of(3).getDisplayName(TextStyle.FULL_STANDALONE, new Locale("fi")));
println(Month.of(3).getDisplayName(TextStyle.FULL_STANDALONE, new Locale("de"))); // doesn't work

Locale.getAvailableLocales().foreach(println)

如果我尝试在 Scastie 操场上重现,我会看到同样的奇怪行为 https://scastie.scala-lang.org/llVhFYjQSu27UMauYw2UDA

我知道本地化取决于 JRE 上可用的语言环境,我的应用程序当前在我插入此类语言环境的 Docker 容器中运行。

标签: javascalalocale

解决方案


JDK 8 很奇怪http://tpcg.io/kMvv4qd7

但在 JDK 11 中它可以工作https://repl.it/repls/CriminalChillyHashmap


推荐阅读