调用locale.getDisplayName函数时,它没有正确返回语言

问题描述 投票:-1回答:1

我正在为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); 

LocaleUtilLiferay类,用于收集在其配置中添加到Liferay的语言ID。在这种情况下,我将返回ID为“ es”,“ en”和“ pt”的数组。getDisplayName(leng)来自Java Locale

java locale
1个回答
0
投票

我无法找到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()

© www.soinside.com 2019 - 2024. All rights reserved.