在把我的约会对象翻译成其他语言时遇到了问题.它现在的显示方式是
h:mm:ss a VV
.我的问题是,如果我将区域设置切换为zh_TW,它将显示为下午11:59 Asia/Shanghai
.
我也希望将Asia/Shanghai
部分翻译成正确的地区.我该怎么做呢?
我试过使用DateTimeFormatter.ofPattern("h:mm:ss a VV", locale)
,但区域ID(VV)部分只显示为英文.
在把我的约会对象翻译成其他语言时遇到了问题.它现在的显示方式是
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"等的映射应该不会太难.