Android-DateUtils と PrettyTime-library のコンテキストでどの問題について話しているのかわかりません。しかし、Android-DateUtils がさまざまな言語の複数形のルールを完全に管理していないことは確かです (特にスラヴ語やアラビア語は、単数形と単純すぎる 1 つの複数形しか認識しないため)。たとえば、このAndroid-issueを参照してください。PrettyTime ライブラリについては、アラビア語を考えれば同じ反論が成り立ちます -ソースを参照してください。
私の推奨事項:
私のライブラリ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 ライブラリよりも多い) と 3 つのテキスト幅 (フル、省略、またはナロー) をサポートしています。正確な複数形の処理が自動的に含まれます。Time4A は、CLDR データに基づく独自の言語リソースを使用します (Android とは独立しています)。ただし、独自のアセットを (UTF-8 で) 定義することにより、これらのリソースを自由にオーバーライドできます。
正規化について:質問で説明したバリアントを示しました。ただし、Time4A(J) で期間を正規化する方法は他にもたくさんあります。このページでは、その機能の使用方法についてさらにアイデアを提供します。
まだ一部の言語が不足している場合は、教えてください。Time4A の次のバージョンでサポートします。現在サポートされている言語はチュートリアルで確認できます。