Как конвертировать кардинальные числа в порядковые - PullRequest
9 голосов
/ 26 сентября 2008

Есть ли простой способ преобразовать числа 1, 2, 3, ... в "1-е", "2-е", "3-е", ..., и таким образом, чтобы я мог дать язык и вернет ли мне правильную форму для языка, на который я нацеливаюсь? Либо стандартный C ++ (stl или boost OK), MFC или ATL, win32 api, либо небольшая, специализированная и бесплатная библиотека, которую я могу скачать откуда-нибудь. Спасибо.

Ответы [ 5 ]

5 голосов
/ 30 сентября 2008

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

РЕДАКТИРОВАТЬ: напр. в польском языке это «5-та класа» (5-й класс) против «5-ти тысячный» (5-й месяц) против «w 5-tym miesiącu» (в 5-й месяц).

0 голосов
/ 07 октября 2008

Поскольку вы используете C ++, я предполагаю, что вы могли бы использовать GNU gettext (также есть порт Windows) для всех переводов или, по крайней мере, понять, как они это решили. Вот соответствующая страница руководства по множественным формам, которая объясняет проблему (которую вы уже нашли, но более подробно) и ее решение:

http://www.gnu.org/software/automake/manual/gettext/Plural-forms.html

0 голосов
/ 02 октября 2008

Вы искали репозиторий CLDR на сайте Unicode? Я не знаю, есть ли у них такого рода вещи, но, поскольку это, вероятно, самый полный репозиторий данных локали, это, вероятно, стоит посмотреть. http://www.unicode.org/cldr/

0 голосов
/ 26 сентября 2008

Я потратил довольно много времени на изучение этого, потому что это слишком большой проект, чтобы понять его самому. Похоже, что библиотека ICU - единственная, которая предоставляет эту функциональность в несколько комплексном виде (http://www.icu -project.org / apiref / icu4c / classRuleBasedNumberFormat.html ). Хотя я не очень хочу включать такую ​​огромную библиотеку. Я буду продолжать искать, и я все еще открыт для предложений.

0 голосов
/ 26 сентября 2008

Здесь - это фрагмент кода в CodeProject, который выполняет эту работу. Сам не пробовал.

...