# 
        Pluralization 
            1.0.3+
        
    
        # 
        Введение
    
Языки различаются правилами преобразования слов во множественное число («час», «часа», «часов» и так далее). Одни языки, вроде английского, имеют две формы, другие — только одну форму, а в некоторых есть множество форм. Данный компонент использует правила плюрализации Unicode CLDR для определения корректной формы слова в указанном числе. CLDR использует короткие мнемонические теги для этих форм:
- zero
- one (единственное число)
- two (двойственное число)
- few (паукальное число)
- many (также используется для дробей, если они имеют отдельный класс)
- other (основная форма множественного числа; также используется, если у языка имеется только одна форма или если требуемая форма не указана. Указание этой формы обязательно)
См. Language Plural Rules для форм каждого языка в CLDR.
Эти формы используются для предоставления локализованных единиц с более естественными способами выражения фраз, которые варьируются во множественном числе, например: «1 час», «2 часа» и «5 часов». Хотя они не могут выразить все сложности ествественных языков, они допускают более ествественную формулировку, чем конструкции вроде «1 час(-а/-ов)».
Плюрализация осуществляется с помощью объекта Intl.PluralRules.
        # 
        TeslaCloud.Pluralization
    
        # 
        Свойства
    
        # 
        __construct
    
Конструктор класса.
__construct: function(language)
        # 
        Параметры
    
        # 
        pluralPhraseName
    
Получение названия фразы в нужной форме плюрализации.
pluralPhraseName: function(number, phrases)
        # 
        Параметры
    
        # 
        Примеры
    
        # 
        Получение названия фразы из списка
    
/**
 * В случае, если текущий язык — английский, а count($items) == 1, будет возвращено «there_is_one_item», в
 * противном случае — «there_are_x_items». Остальные формы не используются английским языком, но могут быть
 * использованы другими языками.
 */
const phraseName = TeslaCloud.Pluralization.current.pluralPhraseName(
    Object.keys(items).length,
    {
        zero: 'there_are_zero_items',
        one: 'there_is_one_item',
        few: 'there_are_few_items',
        many: 'there_are_many_items',
        other: 'there_are_x_items'
    }
);
        # 
        Получение названия фразы без указания списка форм
    
/**
 * В отличие от предыдущего примера, здесь указывается не список названий фраз, а название одной фразы для формы
 * «other». Остальные фразы будут получены путем добавления к ним суффикса с названием формы: «there_are_x_items_zero»,
 * «there_are_x_items_one», «there_are_x_items_two», «there_are_x_items_few», «there_are_x_items_many».
 */
const phraseName = TeslaCloud.Pluralization.current.pluralPhraseName(Object.keys(items).length, 'there_are_x_items');
        # 
        phrasePlural
    
Получение фразы в нужной форме плюрализации.
phrasePlural: function (number, phrases, vars, fallback)
        # 
        Параметры
    
        # 
        Примеры
    
const phrase = TeslaCloud.Pluralization.current.phrasePlural(
    Object.keys(items).length,
    'there_are_x_items',
    {'{count}': Object.keys(items).length}
);
        # 
        getCardinal
    
Получение названия формы плюрализации для текущего языка.
getCardinal: function (number, availableCardinals = [])
        # 
        Параметры
    
Если браузер пользователя не поддерживает плюрализацию, будет возвращена форма other.
        # 
        Плюрализация во фразах
    
Существует возможность задавать правила плюрализации непосредственно во фразах. Для этого во фразе необходимо создать подобную конструкцию:
{plural
  number="{number}"
  zero="…"
  one="…"
  two="…"
  few="…"
  many="…"
  other="…"
  123="…"
  precision="0"
}
        # 
        Параметры
    
        # 
        Примеры
    
Создадим фразу test_plural_phrase для русского языка:
На столе {plural
           number="{count}"
           1="одна книга"
           one="#n книга"
           few="#n книги"
           other="#n книг"
         }.В тестовых целях, добавить фразу в JavaScript можно непосредственно из консоли:
XF.phrases.test_plural_phrase = `На столе {plural
                                            number="{count}"
                                            1="одна книга"
                                            one="#n книга"
                                            few="#n книги"
                                            other="#n книг"
                                          }.`;Обратите внимание на 1 и one: 1 обозначает конкретное число, а one — категорию, в которую, в русском языке, будут входить все числа, оканчивающиеся на 1, кроме 11 и 111.
Далее отобразим фразу:
console.log(XF.phrase('test_plural_phrase', {'{count}': 1}));
console.log(XF.phrase('test_plural_phrase', {'{count}': 2}));
console.log(XF.phrase('test_plural_phrase', {'{count}': 5}));
console.log(XF.phrase('test_plural_phrase', {'{count}': 10}));
console.log(XF.phrase('test_plural_phrase', {'{count}': 11}));
console.log(XF.phrase('test_plural_phrase', {'{count}': 101}));Результат:
На столе одна книга.
На столе 2 книги.
На столе 5 книг.
На столе 10 книг.
На столе 11 книг.
На столе 101 книга.
Если браузер пользователя не поддерживает плюрализацию, функция XF.phrase вернет текст фразы без правил плюрализации:
На столе .
Для предотвращения подобных ситуаций в функцию XF.phrase может быть передан аргумет fallback, который будет использоваться вместо указанной фразы.