За последние 24 часа нас посетили 26449 программистов и 1545 роботов. Сейчас ищет 821 программист ...

Плюральные формы

Тема в разделе "PHP для новичков", создана пользователем Electr0nics, 5 фев 2017.

  1. Electr0nics

    Electr0nics Новичок

    С нами с:
    5 фев 2017
    Сообщения:
    1
    Симпатии:
    0
    Здравствуйте.
    Строка из кода
    <?php printf(_n('1 комментарий', '%1$s комментариев', $comment_count, 'tuto'), number_format_i18n($comment_count)); ?>
    Если комментарий один пишет "комментарий"
    Если больше одного пишет "комментариев"
    Но с цифрами 2, 3, 4 нужно выводить "комментария"
    Подскажите пожалуйста как это реализовать?
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Направление, думаю, примерно такое нужно:
    PHP:
    1. switch ($comment_count) {
    2.     case 2:
    3.     case 3:
    4.     case 4:{
    5.         $text = "комменария";
    6.         break;
    7.     }
    8.     default: {
    9.         $text = "комменариев";
    10.         break;
    11.     }
    12. }
    Локализация на другие языки планируется?
    --- Добавлено ---
    P.S. проверять, кстати, нужно не само число, а последнюю цифру в нем. Ну там.. 72 комментария, 19821 комментарий..
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    в пхп есть какой-то встроенный функционал для вот этого вот дела. Но я в нем не разобрался. Вынес для себя такой вектор: не используй формы, требующие плюральности. Использую сокращения :D
     
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    101 комментарий, 111 комментариев. По-ходу, две последних)
     
  5. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Только он, вроде, для русского языка подходит так себе, не?
     
  6. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    PHP:
    1.     function declension($number, $titles = ["{DECLENSION}","{DECLENSION}","{DECLENSION}"]){
    2.         $cases = array (2, 0, 1, 1, 1, 2);
    3.         if(empty($titles)) $titles = array_fill(0,3,"{DECLENSION}");
    4.         if(count($titles) < 3){
    5.             $titles += array_fill(3-count($titles), 3-count($titles), $titles[0]);
    6.         }
    7.         if(!$number)
    8.             return $titles[2];
    9.         return $titles[ ($number%100 > 4 && $number %100 < 20) ? 2 : $cases[min($number%10, 5)] ];
    10.     }
     
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Fell-x27 нравится это.