首页 > 解决方案 > 调用 locale.getDisplayName 函数时,它不会正确返回语言

问题描述

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

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

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

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

为什么它返回“English”而不是“Portuguese”?

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

openjdk 版本“1.8.0_232”

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

OpenJDK 64 位服务器 VM(内部版本 25.232-b09,混合模式)

编辑 评论中的代码:

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

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

标签: javalocale

解决方案


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

  • fromLanguageId(String)最终调用三个参数版本
    • validate = true: 只返回可用的语言和
    • useDefault = true:如果不可用或未知,则使用默认值
  • Locale("en", "US")如果未更改,则默认为( setDefault())

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

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

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

您也可以 pass validate = false,它禁用可用性检查,但不确定这是否有意义 - 您可以Locale.fromLanguageId()改用。


推荐阅读