java - 调用 locale.getDisplayName 函数时,它不会正确返回语言
问题描述
我正在为 Liferay 开发的应用程序编写 Web 服务。我遇到的问题是,当我要调用为返回语言而创建的 REST API 的函数时,它会在其中一个中出现问题。
此方法调用locale.getDisplayName (locale)
返回语言名称的 Java 默认值。就我而言,我有三种语言:西班牙语、英语和葡萄牙语。
对于前两种语言,我传递了相应的语言locale
,它返回正确语言的名称:
es
返回西班牙语- 正确en
返回英语- 正确
但是,当我通过葡萄牙语时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
解决方案
我找不到任何可用的 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()
改用。
推荐阅读
- bash - sed 命令不适用于 open 命令
- amazon-web-services - 在 aws cloudwatch 日志中创建导出任务
- amazon-web-services - 如何将我的日志文件(在我的 EC2 实例中生成)摄取到 azure 数据云中
- visual-studio - Visual Studio Editor 2019 中的白色左边距
- python - 字典不会按要求显示
- angular - 如何在工具提示中使用chart.js以角度显示隐藏条形图的信息?
- python - Pytorch 1D 张量预期但得到 2D 张量
- android-studio - 满足某些条件时如何防止出现警报对话框?
- python - 是否可以在 python 程序中嵌入 Blender/Freecad?
- oauth-2.0 - 在 NextJS API 中获取 JWT 令牌