在把我的约会对象翻译成其他语言时遇到了问题.它现在的显示方式是 h:mm:ss a VV.我的问题是,如果我将区域设置切换为zh_TW,它将显示为下午11:59 Asia/Shanghai.

我也希望将Asia/Shanghai部分翻译成正确的地区.我该怎么做呢?

我试过使用DateTimeFormatter.ofPattern("h:mm:ss a VV", locale),但区域ID(VV)部分只显示为英文.

推荐答案

我的输出必须是地区/(城市或国家)

时区ID(如Asia/Shanghai)中的两个部分不应单独翻译.

然而,你can得到了一个时区的"模范城市".这是百人会记录的众多事情之一.我不知道用于获取样本城市的标准Java API,但您可以使用CLDR engine库(Maven).

假设我想要找到一个Asia/Shanghai人的模范城市,本地化为ar-BH人.

var cldr = CLDR.get("ar-BH");
System.out.println(cldr.Schema.TimeZones.exemplarCity.get(cldr.General.bundle(), "Asia/Shanghai"));

输出:

شنغهاي 

如果你还想要该大陆的本地化名称(Asia/Shanghai中的"Asia"),你可以使用getRegionDisplayName.

System.out.println(cldr.General.getRegionDisplayName("142", DisplayNameOptions.build()));

请注意,我通过了"142",这显然是代表亚洲的UN M49 ID.请参阅可用ID here的列表.IANA区域名称中/之前的部分只有少量选项.维护从"亚洲"到"142"、"欧洲"到"150"等的映射应该不会太难.

Java相关问答推荐

获取拦截器内部的IP地址

我可以从Java模块中排除maven资源文件夹吗?

如何在Android上获取来电信息

有没有一种方法使保持活动设置专用于java.net.http.HttpClient的一个实例

是否保证在事务性块的末尾标记违反约束?

Spring data JPA/Hibernate根据id获取一个列值

我正在try 跟踪数组中最大的两个数字

生成桥方法以解决具有相同擦除的冲突方法

带错误BER验证的itext8签名返回pdf

SonarLint:只能有条件地调用方法(S)

如何只修改父类ChroniclerView位置0处的第一个嵌套ChroniclerView(child)元素?

垃圾收集时间长,会丢弃网络连接,但不会在Kubernetes中反弹Pod

如何创建模块信息类文件并将其添加到JAR中?

如何在透视表中添加对计数列的筛选?

如何从HttpResponse实例获取Entity对象的内容?

每次我需要时创建和关闭数据库连接会有什么效果吗?

基于Java中mm/dd/yy格式的最近日期对数组列表进行排序

无法在IntStream上应用Collectors.groupingBy

将基于实例编号的对象列表拆分为新的对象列表

窗口启动后不久,从java.awt.Graphics disapear创建的矩形