Как показать локализованные единицы даты в форматированной строке в Java / Android? - PullRequest
2 голосов
/ 18 марта 2020

Допустим, у меня есть период дней:

Period p = Period.ofDays(3);

И я хочу отформатировать период с меткой "days" в строке, чтобы получить эту строку в качестве вывода:

// "3 days"

... но я хочу локализовать компонент "days", поэтому я не могу использовать отформатированную строку, подобную приведенной ниже, иначе она будет корректно отображаться только в Engli sh:

String.format("%d days", numberOfDays); // Won't localize 'days'

Какие API есть в Java / Kotlin / Android для представления периода времени, например часов, дней, недель, лет в локали? Я бы предпочел не локализовать эти слова сам, если бы позволил API сделать это.

1 Ответ

2 голосов
/ 08 апреля 2020

Как предлагается в одном комментарии, вы можете использовать мою библиотеку Time4J и использовать следующий код:

Period p = Period.ofDays(3);
Locale loc = Locale.ENGLISH; // or any other supported locale
String formatted = PrettyTime.of(loc).print(p); // 3 days

Учебное пособие также содержит список поддерживаемых в настоящее время языков . Кстати, Time4J-эквивалент для java.time.Period будет net.time4j.Duration<CalendarUnit>, если вы заинтересованы в других функциях, таких как нормализация или расширенная совместимость ISO и т. Д. c.

Примечание. Если вы используете Android тогда вам лучше использовать родственную библиотеку Time4A вместо Time4J, но представленный код будет таким же.

...