Существуют ли какие-либо локализованные константы, такие как «Сегодня», «Завтра», «Вчера» и т. Д. В API даты и времени Joda или Java? - PullRequest
1 голос
/ 20 июня 2019

Мне нужно реализовать функциональность, которая позволяет клиенту веб-сайта увидеть ближайший возможный день доставки.Несколько примеров:

Доставка доступна сегодня, 20 июня

Доставка доступна Завтра, 21 июня

Доставка доступна вторник, 24 июня

Проблема в том, что это свойство локализовано на 6 разных языках, и я хотел бы знать, есть ли способ не создавать локализованные свойства для временных наречий, таких как «Сегодня» и «Завтра»?Может быть, есть какие-то предопределенные константы или перечисления?

Ответы [ 2 ]

3 голосов
/ 20 июня 2019

К вашему сведению, ни стандартная Java, ни Joda-Time не имеют таких функций.

Однако моя библиотека Time4J поддерживает относительные выражения, такие как "сегодня", "завтра", "вчера" или "следующее воскресенье", на более чем 90 языках. Пример использования тестовых часов:

  TimeSource<?> clock = () -> PlainTimestamp.of(2015, 8, 1, 10, 24, 5).atUTC();
  String durationInDays =
      PrettyTime.of(Locale.GERMAN).withReferenceClock(clock).printRelative(
          PlainTimestamp.of(2015, 8, 1, 17, 0).atUTC(),
          Timezone.of(EUROPE.BERLIN),
          TimeUnit.DAYS);
  System.out.println(durationInDays); // heute (german word for today)

Вы также можете получить отдельные переводы для этих выражений, вызвав такие методы, как PrettyTime.of (Locale.getDefault ()). PrintToday () или printNext(Weekday) и т. Д. Если вы работаете на Android, вы можете использовать дочерний проект Time4A. Список поддерживаемых языков также документирован . Если вам не хватает языка, пожалуйста, дайте мне знать.

0 голосов
/ 20 июня 2019

Вы можете использовать getDisplayName метод Календаря ;он возвращает локализованную строку нужного вам атрибута.

Вот так вы можете получить строку нужного вам атрибута.

Calendar cal = Calendar.getInstance();
String <attribute_localized> = cal.getDisplayName(Calendar.<attribute>, Calendar.LONG, Locale.<your_locale>);

Обратите внимание, однако, что метод вернет null для любого числового значения;в этом случае вы должны использовать метод get(Calendar.<attribute>)

Вот пример работы этого кода:

Calendar cal = Calendar.getInstance();

Locale myLocale = Locale.ENGLISH;
Integer year = cal.get(Calendar.YEAR);
Integer day_of_month = cal.get(Calendar.DAY_OF_MONTH);

String month = cal.getDisplayName(Calendar.MONTH, Calendar.LONG, myLocale);
System.out.println("Today is " + day_of_month + " " + month + " " + year);
// Today is 20 June 2019

myLocale = Locale.ITALIAN;
month = cal.getDisplayName(Calendar.MONTH, Calendar.LONG, myLocale);
System.out.println("Today is " + day_of_month + " " + month + " " + year);
// Today is 20 giugno 2019
...