イアンレイクの答えから:
final CharSequence relativeTimeSpan = DateUtils.getRelativeTimeSpanString(time, now, 0);
DateUtils.getRelativeTimeSpanStringは、次のようなものを生成します。
あるいは、これにより、与えられたを使用してAndroidres
フレームワークを介して翻訳を提供できるようになりContext
ます。これは、フレームワークの方法から得られるものと希望するメッセージングの違いがある場合に役立ちます。
public static String getTimeAgo(long time, Context context) {
if (time < 1000000000000L)
// if timestamp given in seconds, convert to millis
time *= 1000;
final long now = getCurrentTime(context);
if (time > now || time <= 0) return "";
final Resources res = context.getResources();
final long time_difference = now - time;
if (time_difference < _A_MINUTE)
return res.getString(R.string.just_now);
else if (time_difference < 50 * _A_MINUTE)
return res.getString(R.string.time_ago,
res.getQuantityString(R.plurals.minutes, (int) time_difference / _A_MINUTE, time_difference / _A_MINUTE));
else if (time_difference < 24 * _AN_HOUR)
return res.getString(R.string.time_ago,
res.getQuantityString(R.plurals.hours, (int) time_difference / _AN_HOUR, time_difference / _AN_HOUR));
else if (time_difference < 48 * _AN_HOUR)
return res.getString(R.string.yesterday);
else
return res.getString(R.string.time_ago,
res.getQuantityString(R.plurals.days, (int) time_difference / _A_DAY, time_difference / _A_DAY));
}
ここで、定数を次のように定義しました。
/** One second (in milliseconds) */
private static final int _A_SECOND = 1000;
/** One minute (in milliseconds) */
private static final int _A_MINUTE = 60 * _A_SECOND;
/** One hour (in milliseconds) */
private static final int _AN_HOUR = 60 * _A_MINUTE;
/** One day (in milliseconds) */
private static final int _A_DAY = 24 * _AN_HOUR;
その後、残りの作業は複数形と文字列リソースの構造になります。
私のデフォルトのローカルはenなので、res/values/strings.xml
:
<!-- time ago strings -->
<string name="just_now">just now</string>
<string name="time_ago">%s ago</string>
<string name="yesterday">yesterday</string>
次にres/values/plurals.xml
:
<plurals name="minutes">
<item quantity="one">a minute</item>
<item quantity="other">%d minutes</item>
</plurals>
<plurals name="hours">
<item quantity="one">an hour</item>
<item quantity="other">%d hours</item>
</plurals>
<plurals name="days">
<item quantity="one">a day</item>
<item quantity="other">%d days</item>
</plurals>
このアプローチでは、言語の語彙と文法にローカライズできるはずです。言語が異なれば、「分」などの単語の単語が異なるだけでなく、量に基づいて単語を複数形にする方法についても異なるルールがあります。したがって、複数形のリソースは、複数形にローカライズするためのAndroidフレームワークのサポートを利用します。残っているのは翻訳を提供することだけです。