You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android端Luxon西班牙语Locale:为何需用es-rUS而非es-US/es-ES?

关于Luxon在Android端解析西班牙语Locale的问题

我有一个格式为09/01/2022 08:45 PM的日期字符串,需要用Luxon针对英、西双语环境解析日期。英文环境用en-US作为Locale,在Android和iOS端都能正常解析;但西班牙语环境下,iOS用es-US可以正常解析,Android却只有用es-rUS才能成功,用es-US或es-ES都无效,哪怕通过Settings设置默认Locale也只支持es-rUS。想问为什么要在Locale里加“r”?Luxon官网上找不到相关说明。


英文环境(Android/iOS均正常)

const appointmentDate = DateTime.fromFormat('09/01/2022 08:45 PM', 'MM/dd/yyyy h:mm a', { locale: 'en-US' });
console.log('appointmentDay:' + appointmentDate.day);

输出:MenuPress:1

西班牙语环境(iOS正常)

const appointmentDate = DateTime.fromFormat('09/01/2022 08:45 PM', 'MM/dd/yyyy h:mm a', { locale: 'es-US' });
console.log('appointmentDay:' + appointmentDate.day);

输出:1

西班牙语环境(Android仅es-rUS有效)

const appointmentDate = DateTime.fromFormat('09/01/2022 08:45 PM', 'MM/dd/yyyy h:mm a', { locale: 'es-rUS' });
console.log('appointmentDay:' + appointmentDate.day);

输出:1

Settings全局Locale设置示例

Settings.defaultLocale = 'es-rUS';

原因解析

这里的r代表区域变体(region variant),本质是Android系统对Locale标识符的特殊处理逻辑导致的跨平台差异:

  • Android底层依赖ICU(国际Unicode组件)库处理国际化逻辑,部分版本或设备的ICU配置中,仅识别带r前缀的区域格式(es-rUS)来指代美国地区的西班牙语环境,标准BCP 47格式的es-US未被正确映射。
  • iOS完全遵循BCP 47标准的Locale命名规则,直接支持es-US这类格式,不需要额外前缀。
  • Luxon本身并不维护Locale数据,而是直接调用宿主环境(Android/iOS的JS引擎)提供的国际化能力,所以该问题属于系统层面的ICU支持差异,而非Luxon自身的规则——这也是官网未提及该问题的原因。

内容的提问来源于stack exchange,提问作者Ashok Reddy Narra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 01:25:38