Правильное окончание дня/дней/день

Тема в разделе ".:: Готовые решения", создана пользователем terkin, 20 янв 2008.

Статус темы:
Закрыта.
  1. terkin

    terkin

    Регистр.:
    9 дек 2006
    Сообщения:
    513
    Симпатии:
    162
    Вобщем примитив но мне часто бывает нужен поэтому вот :
    PHP:
    function  days($day)
        {
            
    $a=substr($day,strlen($day)-1,1);
            if(
    $a==1$str="день";
            if(
    $a==|| $a==|| $a==4$str="дня";
            if(
    $a==|| $a==|| $a==|| $a==|| $a==|| $a==0$str="дней";
            return 
    $str;
        }
    Вызываем :
    PHP:
    $days=150;
    echo 
    $days." ".days($days) ;
     
    pavloff и Flock нравится это.
  2. medvoodoo

    medvoodoo Постоялец

    Регистр.:
    28 мар 2007
    Сообщения:
    89
    Симпатии:
    19
    вот вобщем-то формулы более общие для всех языков:
    http://translate.sourceforge.net/wiki/l10n/pluralforms
     
    bratok нравится это.
  3. REALiSTiC

    REALiSTiC

    Регистр.:
    30 мар 2006
    Сообщения:
    354
    Симпатии:
    126
    Код:
    [B]ru[/B]  [B]Russian[/B]  nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10< =4 && (n%100<10 or n%100>=20) ? 1 : 2)
    И как это использовать ?
     
  4. RomAndry

    RomAndry Постоялец

    Регистр.:
    21 ноя 2007
    Сообщения:
    102
    Симпатии:
    24
    у меня есть универсальный вариант, которым давно уже пользуюсь
    PHP:
    function decl($int$expr){ 
      
    settype($int"integer"); 
      
    $count $int 100
      if (
    $count >= && $count <= 20) { 
        
    $result $int." ".$expr['2']; 
      } else { 
        
    $count $count 10
        if (
    $count == 1) { 
          
    $result $int." ".$expr['0']; 
        } elseif (
    $count >= && $count <= 4) { 
          
    $result $int." ".$expr['1']; 
        } else { 
          
    $result $int." ".$expr['2']; 
        } 
      } 
      return 
    $result


    вызов простой:
    $value = 18;
    $decl = array('фотка', 'фотки', 'фоток')
    или
    $decl = array('день', 'дня', 'дней')
    или
    $decl = array('рубль', 'ру***', 'рублей')

    declension($value, $decl);
     
    zaartix и Dogmat нравится это.
  5. ArtInt

    ArtInt Постоялец

    Регистр.:
    3 июн 2007
    Сообщения:
    88
    Симпатии:
    35
    Примерно так, следующий код:

    PHP:
    function plural_type($n) {
      return (
    $n%10==&& $n%100!=11 : ($n%10>=&& $n%10<=&& ($n%100<10 || $n%100>=20) ? 2));
    }

    $_plural_years = array('год''года''лет');
    $_plural_months = array('месяц''месяца''месяцев');
    $_plural_days = array('день''дня''дней');
    $_plural_times = array('раз''раза''раз');

    $x 2;
    echo 
    "$x " $_plural_years[plural_type($x)];

    $x 8;
    echo 
    $x " $_plural_months[plural_type($x)];

    $x 3;
    echo 
    $x " $_plural_days[plural_type($x)];

    $x 55;
    echo 
    $x " $_plural_times[plural_type($x)];

    выведет:
     
    san4747, AlexVolkov, bratok и 2 другим нравится это.
  6. bratok

    bratok

    Регистр.:
    16 ноя 2006
    Сообщения:
    203
    Симпатии:
    47
    вот это даааа.... я парился долго с написанием подобных функций.
     
Статус темы:
Закрыта.