Склонение слова "Комментариев"

Прислано: romantaran

пн, 18/09/2006 - 14:15

Другие статьи по теме:

Как реализовать корректное склонение слова "комментарии" в зависимости от их количества? Как это сделано на drupal.ru?

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано coyotle в пн, 18/09/2006 - 14:45.

в базе хранится три формы фразы
1 comment - 1 сообщение
%count commnts - %count сообщения
%count[2] commnts - %count сообщений
и в зависимости от этого count подставляются разные формы. Более подробно надо смотреть в файле locale.module


Опубликовано romantaran в пн, 18/09/2006 - 15:13.

Спасибо, попробую.


Опубликовано romantaran в пн, 18/09/2006 - 15:22.

Сделал, как сказано, но Друпал пишет: "2 комментария, 7 комментария, 11 комментария".

Почему?


Опубликовано romantaran в пн, 18/09/2006 - 15:51.

в файле common.inc есть функция, которая форматирует строку в зависимости от количества:

<?php
function format_plural($count$singular$plural) {
  if (
$count == 1) return t($singular, array("%count" => $count));

  

// get the plural index through the gettext formula
  
$index = (function_exists('locale_get_plural')) ? locale_get_plural($count) : -1;
  if (
$index 0) { // backward compatibility
    
return t($plural, array("%count" => $count));
  }
  else {
    switch (
$index) {
      case 
"0":
        return 
t($singular, array("%count" => $count));
      case 
"1":
        return 
t($plural, array("%count" => $count));
      default:
        return 
t(strtr($plural, array("%count" => '%count['$index .']')), array('%count['$index .']' => $count));
    }
  }
}
?>

Никто не знает, как в нее добавить %count[2]?


Опубликовано coyotle в вт, 19/09/2006 - 06:43.

зайдите на admin/locale/string/search
найдите две строки :
count comments
count[2] comments
и отредактируйте перевод этих строк как писал выше.


Опубликовано romantaran в вт, 19/09/2006 - 06:55.

да я отредактировал. ни фига не работает.


Опубликовано romantaran в вт, 19/09/2006 - 07:40.

На drupal.org, кажется, описывалась похожая проблема: http://drupal.org/node/72277
прилагался патч, но я так и не смог разобраться с этой системой плюсиков и минусиков


Опубликовано Yuliya (гостевой логин) в вс, 16/09/2007 - 15:15.

Скажите,пожалуйста,как правильно произносится и склоняется слово "влазить" ..."я влажу"-правильно?


Опубликовано romantaran в вс, 16/09/2007 - 16:50.

Правильно. Когда возникают такие вопросы, заглядывайте сюда: http://slovari.yandex.ru/dict/ushakov


Опубликовано igdrasil@drupal.org в вс, 16/09/2007 - 17:47.

но я так и не смог разобраться с этой системой плюсиков и минусиков
а с ними и не надо разбираться, для этого есть утилиты
http://drupal.org/patch/apply


Опубликовано romantaran в вс, 16/09/2007 - 19:29.

Кстати, как показывает практика, на склонение слов дурно влияет модуль Panels.


Опубликовано aka в вт, 25/09/2007 - 18:49.

Наблюдаю такую ошибку на 5.1

Вроде в переводе все правильно прописано:

Plural-Forms: nplurals=3; plural=((((n%10)==1)&&((n%100)!=11))?(0):(((((n%10)>=2)&&((n%10)<=4))&&(((n%100)<10)||((n%100)>=20)))?(1):2));\n"

Помогите...


Опубликовано vadbars@drupal.org в вт, 25/09/2007 - 19:23.

В каком переводе ошибка?

Посмотрите в файле перевода. Помимо формулы (которую вы привели), там должно быть указано в переводе конкретной строки что-то типа:
msgid "1 guest"
msgid_plural "@count guests"
msgstr[0] "@count гость"
msgstr[1] "@count гостя"
msgstr[2] "@count гостей"


Опубликовано axel в вт, 25/09/2007 - 21:20.

Патч не требуется, с 4.7.2 если не ошибаюсь баги с множественными числами были пофиксены. См. ошибки в переводе.


Опубликовано aka в ср, 26/09/2007 - 16:28.

ошибка проявляется только на комментариях, при том, что прописано правильно:

#: modules/statistics/statistics.module:92
msgid "1 read"
msgid_plural "@count reads"
msgstr[0] "@count просмотр"
msgstr[1] "@count просмотра"
msgstr[2] "@count[2] просмотров"

= 6 просмотров

но

#: modules/node/node.module:68
msgid "1 comment"
msgid_plural "@count comments"
msgstr[0] "@count комментарий"
msgstr[1] "@count комментария"
msgstr[2] "@count[2] комментариев"

= 6 комментария (тоже самое для новых комметариев)

т.е. на msgstr[2] "@count[2] комментариев" вообще не переключается

для чистоты эксперимента я удалил вообще все остальное из русского перевода, оставил только два этих случая, ошибка остается...

привожу целиком русский перевод:

===

#
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"POT-Creation-Date: 2007-09-25 22:37+0400\n"
"PO-Revision-Date: 2007-09-25 22:37+0400\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(((n%10==1) && (n%100!=11)) ? (0) : (((n%10>=2) && (n%10<=4) && ((n%100<10) || (n%100>=20))) ? (1) : (2)));\n"

#: modules/comment/comment.module:314
msgid "1 new comment"
msgid_plural "@count new comments"
msgstr[0] "@count новый комментарий"
msgstr[1] "@count новых комментария"
msgstr[2] "@count[2] новых комментариев"

#: modules/statistics/statistics.module:92
msgid "1 read"
msgid_plural "@count reads"
msgstr[0] "@count просмотр"
msgstr[1] "@count просмотра"
msgstr[2] "@count[2] просмотров"

===


Опубликовано vadbars@drupal.org в ср, 26/09/2007 - 16:46.

Это баг, я его пропустил, меа кульпа... Стал смотреть примеры для ответа вам, увидел ошибку.
Надо убрать [2], т.е. вместо - msgstr[2] "@count[2] просмотров" должно быть - msgstr[2] "@count просмотров". С "комментариями" и т.п. - аналогично.


Опубликовано aka в пт, 28/09/2007 - 16:03.

попробовал заменить @count[2] на @count - это не помогает. по прежнему 53 просмотра и 40 просмотров но 2 новых комментария и 6 новых комментария


Опубликовано vadbars@drupal.org в пт, 28/09/2007 - 18:51.

Внимательно еще раз проверьте. Формула одна и если она правильно отрабатывается в одном случае, то должна и в другом вести себя так же. Возможно строки с "комментария" продублированы.


Опубликовано aka в пн, 01/10/2007 - 18:07.

Обновление до 5.2 не помогло...


Опубликовано aka в ср, 16/01/2008 - 16:06.

Ну раз никто не ответил, пришлось чинить самому :) Это все было из-за модуля themesettings; выключил его, и о чудо!


Опубликовано kervi@drupal.org в вт, 13/07/2010 - 06:28.

drupal 6.14

template.php

<?php function numberEnd($number$titles) {
    
$cases = array (201112);
       return 
$titles[ ($number%100>&& $number%100<20)? $cases[min($number%105)] ];
};
?>

В шаблон (в моем случае Views)
<?php $a $fields['comment_count']->content;echo $a.' комментари'.numberEnd($a, array('й','я','ев'));?>