提问人:Barry Tone 提问时间:10/25/2023 更新时间:10/25/2023 访问量:71
如何使用 Java ZoneId 的语言环境?
How to use locale for Java ZoneId?
问:
将我的日期翻译成其他语言时遇到问题。它现在的显示方式是 .我的问题是,如果我将我的语言环境交换为zh_TW,它会显示为 .h:mm:ss a VV
下午11:59 Asia/Shanghai
我也想将部分翻译成正确的区域设置。我该怎么做?Asia/Shanghai
我试过使用,但区域 ID (VV) 部分仅以英文显示。DateTimeFormatter.ofPattern("h:mm:ss a VV", locale)
答:
1赞
Gestankbratwurst
10/25/2023
#1
您在这里的问题是“V”解析了时区 id,它并不意味着被翻译为简单的文本。尝试使用由小写字母定义的 timezone-name。这可以使用现在的区域设置进行翻译。z
评论
1赞
Barry Tone
10/25/2023
timezone-name 是太平洋标准时间等等,对吧?不幸的是,它对我不起作用,我的输出需要是Region/(City or Country)
0赞
Sweeper
10/25/2023
@BarryTone嗯,这就是你真正想要的吗?这是不可能的 - 据我所知,CLDR 中没有这样的本地化“区域 ID”列表。
0赞
Barry Tone
10/25/2023
@Sweeper是的,我的问题实际上源于巴林的一个客户。在 IANA 中,它们的时区名称为 。但客户说这是错误的,他们想要一个展示,例如或任何带有他们国家名称的东西。AST or Arabic Standard Time
Asia/Bahrain
3赞
Sweeper
10/25/2023
#2
我的输出需要是区域/(城市或国家)
时区 ID 中的两个部分不应单独翻译。Asia/Shanghai
但是,您可以获得时区的“示例城市”。这是 CLDR 记录的众多内容之一。我不知道用于获取示例城市的标准 Java API,但您可以使用 CLDR 引擎库 (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
getRegionDisplayName
System.out.println(cldr.General.getRegionDisplayName("142", DisplayNameOptions.build()));
请注意,我通过了“142”,这显然是亚洲的联合国 M49 ID。请参阅此处的可用 ID 列表。在 IANA 区域名称之前,只有少量部件选项。维护从“亚洲”到“142”、“欧洲”到“150”等的映射应该不会太难。/
评论
0赞
VGR
10/25/2023
我不知道有 Java 的 CLDR 库。我可能不得不更新我的这个答案。
评论
6:58:51 下午 中国时间
中国时间
ZoneId.of("Asia/Shanghai").getDisplayName(TextStyle.FULL_STANDALONE, Locale.CHINESE);
Locale.CHINESE
new Locale("zh", "tw")