当调用locale.getDisplayName函数时,它不会正确返回语言



我正在为Liferay中开发的应用程序编程web服务。我遇到的问题是,当我要调用为返回语言而创建的REST API函数时,其中一个函数会出现问题。

此方法调用Java默认locale.getDisplayName (locale),返回语言名称。就我而言,我有三种语言:西班牙语、英语葡萄牙语

对于前两种语言,我传递相应的locale,它返回正确语言的名称:

  • es返回西班牙语-正确
  • en返回英语-正确

但是,当我通过葡萄牙语pt时,它会返回英语(美国(,而不是葡萄牙语

为什么它会返回"英语";而不是";葡萄牙语">

这是安装在服务器上的java版本:

openjdk版本"1.8.0_232";

OpenJDK运行时环境(build 1.8.0_232-8u232-b09-1~deb9u1-b09(

OpenJDK 64位服务器虚拟机(内部版本25.232-b09,混合模式(

编辑 注释中的代码:

Locale leng = LocaleUtil.fromLanguageId(i.getIdiomaId()); 
String idiomCap = leng.getDisplayName(leng); 

LocaleUtilLiferay类,用于收集添加到Liferay配置中的语言id。在这种情况下,我将返回一个id为"0"的数组;es"en";以及";pt";getDisplayName(leng)来自JavaLocale

我找不到任何可用于LocaleUtil的javadoc,只有空的存根。检查我发现的源代码:

  • fromLanguageId(String)最终调用了具有
    • validate = true:仅返回可用的语言和
    • useDefault = true:如果不可用或未知,则使用默认值
  • 如果未更改,则默认值为Locale("en", "US")(setDefault()(

我想葡萄牙语不可用,方法返回Locale("en","US"(`,但我不知道可用在这种情况下意味着什么-我找不到任何文档(懒得真正搜索或检查更多源代码(-如果启用警告,应该有一个关于无效语言的LOG条目。

您可以尝试使用该方法的3参数版本,传递useDefault = false——如果语言不可用,它应该返回null

LocaleUtil.fromLanguageId(i.getLanguageId(), true, false);

您也可以通过validate = false,它禁用可用性检查,但不确定这是否有多大意义——您可以使用Locale.fromLanguageId()

最新更新