2

私は小さなアプリを書いています.i18nでスポーツイベントの期間を書く必要があります. 私は日付にPrettyTimeライブラリを使用していますが、DateUtilsまたはPrettyTimeを使用しようとすると問題が発生します..

たとえば、デュレーションは 2 分だと言いたいです。i18nをサポートし、ミリ秒を受け入れてCharを返すライブラリに渡す方法が必要です。

アンドロイドには次のものがあります。

com.android.internal.R.plurals.duration_minutes

しかし、アプリからアクセスできません。すべての言語に対して独自の複数形を書かずに、正しい方法で作成する方法はありますか?

ありがとうございました

4

1 に答える 1

1

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 の次のバージョンでサポートします。現在サポートされている言語はチュートリアルで確認できます。

于 2015-08-26T10:49:47.453 に答える