我正在为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);
LocaleUtil
是Liferay类,用于收集添加到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()
。