我正在为Liferay开发的应用程序编写Web服务。我遇到的问题是,当我要调用为返回语言而创建的REST API的函数时,它会遇到其中一种问题。
此方法调用Java默认值locale.getDisplayName (locale)
,该方法返回语言的名称。就我而言,我有三种语言:西班牙文,英文和葡萄牙语。
对于前两种语言,我传递了相应的locale
,它返回正确语言的名称:
es
返回西班牙语-正确en
返回英语-正确但是,当我通过葡萄牙语pt
时,它返回英语(美国),而不是葡萄牙语
为什么返回“英语”而不是“葡萄牙语”?
这是服务器上安装的Java版本:
openjdk版本“ 1.8.0_232”
OpenJDK运行时环境(内部版本1.8.0_232-8u232-b09-1〜deb9u1-b09)
OpenJDK 64位服务器VM(内部版本25.232-b09,混合模式)
EDIT 注释中的代码:
Locale leng = LocaleUtil.fromLanguageId(i.getIdiomaId());
String idiomCap = leng.getDisplayName(leng);
LocaleUtil
是Liferay类,用于收集在其配置中添加到Liferay的语言ID。在这种情况下,我将返回ID为“ es”,“ en”和“ pt”的数组。getDisplayName(leng)
来自Java Locale
我无法找到LocaleUtil
的任何可用Javadoc,只有空的存根。检查我发现的源代码:
fromLanguageId(String)
最终会调用具有validate = true
:仅返回可用语言和useDefault = true
:如果不可用或未知,请使用默认值Locale("en", "US")
(setDefault()
)我想葡萄牙语不可用,并且该方法返回Locale("en",
“ US”)`,但是我不知道available在这种情况下意味着什么。我找不到任何文档-我承认我太懒了,无法真正搜索更多或检查更多源代码。如果启用了警告,则应该有关于该日志的日志条目。
您可以尝试使用该方法的3参数版本,并传递useDefault = false
-如果该语言不可用,则应返回null
。
LocaleUtil.fromLanguageId(i.getLanguageId(), true, false);
您也可以通过validate = false
,这将禁用可用性检查,但不确定是否有意义-您可以改用Locale.fromLanguageId()
。