我不确定您在 Android-DateUtils 和 PrettyTime-library 的上下文中谈论的是哪些问题。但我确信 Android-DateUtils 并不能完美地管理各种语言的复数规则(尤其不是奴隶语言或阿拉伯语,因为它只知道单数和一种复数形式,这太简单了)。参见例如这个Android-issue。关于 PrettyTime-library,如果您考虑阿拉伯语,同样的反对意见也是有效的 - 请参阅源代码。
我的建议:
试用我的库Time4A(一个新的 AAR 库)。然后,您可以使用此代码来处理毫秒输入并生成本地化的分钟字符串:
// input
long millis = 1770123;
// create a duration
Duration<ClockUnit> duration = Duration.of(millis, ClockUnit.MILLIS);
// normalization to (rounded) minutes
duration = duration.with(ClockUnit.MINUTES.rounded());
String s = PrettyTime.of(Locale.ENGLISH).print(duration, TextWidth.WIDE);
System.out.println(s); // 30 minutes
韩语示例(回复@Gabe Sechan 的评论):
String s = PrettyTime.of(new Locale("ko")).print(duration, TextWidth.WIDE);
System.out.println(s); // 30분 (korean translation of "30 minutes")
阿拉伯语示例(从右到左):
String s = PrettyTime.of(new Locale("ar")).print(duration, TextWidth.WIDE);
System.out.println(s); // ٣٠ دقيقة
该解决方案目前支持约 90 种语言(比 PrettyTime 库中的多)和三种文本宽度(完整、缩写或窄)。自动包含准确的复数处理。Time4A 使用自己的基于 CLDR-data 的语言资源(独立于 Android)。但是您可以通过定义自己的资产(在 UTF-8 中)来覆盖这些资源。
关于标准化:我刚刚展示了您在问题中描述的变体。但是,在 Time4A(J) 中,还有更多方法可以标准化持续时间。此页面将为您提供如何使用该功能的更多想法。
如果您仍然想念某些语言,请告诉我,我将在 Time4A 的下一个版本中支持它。当前支持的语言可以在教程中找到。