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

Главные вкладки

Аватар пользователя romantaran romantaran 18 сентября 2006 в 18:15

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

Комментарии

Аватар пользователя coyotle coyotle 18 сентября 2006 в 18:45

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

Аватар пользователя romantaran romantaran 18 сентября 2006 в 19: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 coyotle 19 сентября 2006 в 10:43

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

Аватар пользователя axel axel 26 сентября 2007 в 1:20

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

Аватар пользователя Yuliya Yuliya (не проверено) 16 сентября 2007 в 19:15

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

Аватар пользователя aka aka 25 сентября 2007 в 22: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 vadbars@drupal.org 25 сентября 2007 в 23:23

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

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

Аватар пользователя aka aka 26 сентября 2007 в 20: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 vadbars@drupal.org 26 сентября 2007 в 20:46

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

Аватар пользователя aka aka 28 сентября 2007 в 20:03

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

Аватар пользователя vadbars@drupal.org vadbars@drupal.org 28 сентября 2007 в 22:51

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

Аватар пользователя aka aka 16 января 2008 в 19:06

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

Аватар пользователя kervi@drupal.org kervi@drupal.org 13 июля 2010 в 10: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('й','я','ев'));?>