Заметки из Зазеркалья

16.09.2016

Поддержка строк, требующих согласования с числительными

Реализовано в версии 8.3.10.2168.

Мы добавили в платформу поддержку строк, требующих согласования с числительными. Теперь вы можете формировать строки вида «время выполнения 32 секунды» и «время выполнения 65 секунд» автоматически, не анализируя числительное для того, чтобы использовать правильную форму существительного.

Для этого мы добавили в платформу новый метод СтрокаСЧислом(). Принцип его работы основан на том, что любое числительное в любом языке можно отнести к одной из шести категорий:

  • ZERO – ноль;
  • ONE – один;
  • TWO – два;
  • FEW – немного;
  • MANY – много;
  • OTHER - другое.

В разных языках одни и те же числительные могут относиться к разным категориям. Более того, не во всех языках присутствуют все шесть категорий. Например, в русском языке не используются категории ZERO и TWO. Подробную таблицу соответствия категорий числительным для всех языков вы можете посмотреть на сайте unicode.org.

Метод СтрокаСЧислом() работает следующим образом. Ему нужно передать фрагменты строк для тех категорий, которые присутствуют в выбранном вами языке. И кроме этого передать само числительное. В результате метод, в зависимости от числительного и языка, выберет один из фрагментов строки, подставит в него числительное, и вернёт вам.

Например, на русском языке вам нужно автоматически выводить надпись: «До Нового Года осталось столько-то дней». Тогда использование этого метода может выглядеть следующим образом:

03.png

В результате вы получите такую последовательность строк:

05.png

Или другой пример. На английском языке вам нужно выводить надпись: «Такое-то Января, такой-то день года». Тогда код будет выглядеть похожим образом:

04.png

А в результате вы получите следующую последовательность строк:

06.png

Обратите внимание, что в этих примерах различается не только используемый язык (русский, английский), но и вид числительного. В примере для русского языка используются количественные числительные, а в примере для английского языка - порядковые. Количественные числительные отвечают на вопрос "Сколько?" Порядковые числительные отвечают на вопрос "Который?"

Правописание количественных и порядковых числительных различается, поэтому для них вам нужно использовать разные вызовы метода СтрокаСЧислом(). Например, в русском языке существительное при количественных числительных склоняется по падежам и числам (1 день, 2 дня, 5 дней), а порядковые числительные используются в единственной форме - 1-й день. В английском языке существительное при количественных числительных изменяется только по числам (1 day, 2 days), а для порядковых числительных существуют четыре разные формы: 1st day, 2nd day, 3rd day, 4th day.

Чтобы вам было легче использовать новый метод, в синтакс-помощнике мы указали для каждого языка и для каждого вида числительного (количественного или порядкового) тот состав строк, который следует использовать.

07.png

Таким образом, вам остаётся подставить только правильные формы существительного, и с помощью символов «%1» указать, в каком месте каждого фрагмента будет находиться числительное.

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

02.png

А строковое представление расписания планировщика теперь не содержит орфографических ошибок.

01.png

В заключение хочется отметить, что новый метод СтрокаСЧислом() реализован для 21 языка:

  • английский;
  • азербайджанский;
  • белорусский;
  • болгарский;
  • венгерский;
  • вьетнамский;
  • казахский;
  • китайский;
  • грузинский;
  • латышский;
  • литовский;
  • немецкий;
  • польский;
  • румынский;
  • русский;
  • турецкий;
  • туркменский;
  • украинский;
  • финский;
  • французский;
  • эстонский.

Теги: разработка  8.3.10