Локализованные порядковые числа в Java

Прежде чем вы отметите мой вопрос как повторяющийся, я уже видел ответы на этот вопрос и этот вопрос. Правила порядковых суффиксов в английском языке достаточно просты, как показывают эти ответы, но я надеюсь на подход, поддерживающий локализацию. Например, порядковый номер 10 - это 10-е место на английском языке, а на испанском - 10º. Есть ли библиотека или что-то еще, что позволило бы мне избежать необходимости реализовывать это самостоятельно для каждого языка?

Вопросы, просящие нас порекомендовать или найти книгу, инструмент, библиотеку программного обеспечения, учебное пособие или другой внешний ресурс, не относятся к теме Stack Overflow, поскольку они, как правило, привлекают самоуверенные ответы и спам. Вы мощь испытываете удачу в программное обеспечение, но первый изучаете соответствующий справочный центр, чтобы понять политику этого сообщества. И подумайте об удалении вопроса о это, пожалуйста! Спасибо!

GhostCat 10.04.2018 08:45

@GhostCat На StackOverflow есть сотни вопросов, ответы на которые связаны с функциями API или библиотеками, такими как Apache Commons. Это то, что я ищу, и я бы принял технику или фрагмент кода так же легко, как стороннюю библиотеку.

laptou 10.04.2018 14:49

Итак, есть сотни вопросов, которые не соответствуют критериям этого сообщества. Таким образом что вдруг ваш вопрос по теме ?! Я не придумывал эти правила. Я просто сообщаю вам об этом. И тогда я дал вам альтернативный вариант. И, конечно же, всегда есть такие вещи, как Reddit.

GhostCat 10.04.2018 15:46
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
3
1 674
2

Ответы 2

добавьте зависимость icu в свой gradle:

implementation 'com.ibm.icu:icu4j:xx.xx'

теперь у вас есть RuleBasedNumberFormat, на котором вы можете написать что-то вроде этого, чтобы получить локализованные порядковые номера:

RuleBasedNumberFormat formatter = new RuleBasedNumberFormat(Locale.UK, RuleBasedNumberFormat.ORDINAL);

//ordinalNumber = "1st"
String ordinalNumber = formatter.format(1);

Вот пример для Android, который должен учитывать локали. Обратите внимание, что он написан на Котлине. Для этого требуется Android 7.0 или новее.

import android.icu.text.MessageFormat // Don't use java.text.MessageFormat!

val value = 123
val formatter = MessageFormat("{0,ordinal}", Locale("es", "ES")) // Locale.US for English
val ordinalValue = formatter.format(arrayOf(value)) // "123.º"

обратите внимание, что для этого требуется Android> = 7.0 и что вы должны быть осторожны при использовании android.icu.text.MessageFormat, а не java.text.MessageFormat

ChristophK 05.03.2020 10:07

Другие вопросы по теме