в базе хранится три формы фразы
1 comment - 1 сообщение
%count commnts - %count сообщения
%count[2] commnts - %count сообщений
и в зависимости от этого count подставляются разные формы. Более подробно надо смотреть в файле locale.module
На drupal.org, кажется, описывалась похожая проблема: http://drupal.org/node/72277
прилагался патч, но я так и не смог разобраться с этой системой плюсиков и минусиков
но я так и не смог разобраться с этой системой плюсиков и минусиков
а с ними и не надо разбираться, для этого есть утилиты http://drupal.org/patch/apply
Посмотрите в файле перевода. Помимо формулы (которую вы привели), там должно быть указано в переводе конкретной строки что-то типа:
msgid "1 guest"
msgid_plural "count guests"
msgstr[0] "count гость"
msgstr[1] "count гостя"
msgstr[2] "count гостей"
#: modules/comment/comment.module:314
msgid "1 new comment"
msgid_plural "count new comments"
msgstr[0] "count новый комментарий"
msgstr[1] "count новых комментария"
msgstr[2] "count[2] новых комментариев"
Это баг, я его пропустил, меа кульпа... Стал смотреть примеры для ответа вам, увидел ошибку.
Надо убрать [2], т.е. вместо - msgstr[2] "count[2] просмотров" должно быть - msgstr[2] "count просмотров". С "комментариями" и т.п. - аналогично.
Внимательно еще раз проверьте. Формула одна и если она правильно отрабатывается в одном случае, то должна и в другом вести себя так же. Возможно строки с "комментария" продублированы.
Комментарии
в базе хранится три формы фразы
1 comment - 1 сообщение
%count commnts - %count сообщения
%count[2] commnts - %count сообщений
и в зависимости от этого count подставляются разные формы. Более подробно надо смотреть в файле locale.module
Спасибо, попробую.
Сделал, как сказано, но Друпал пишет: "2 комментария, 7 комментария, 11 комментария".
Почему?
в файле 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]?
зайдите на admin/locale/string/search
найдите две строки :
count comments
count[2] comments
и отредактируйте перевод этих строк как писал выше.
да я отредактировал. ни фига не работает.
На drupal.org, кажется, описывалась похожая проблема: http://drupal.org/node/72277
прилагался патч, но я так и не смог разобраться с этой системой плюсиков и минусиков
Патч не требуется, с 4.7.2 если не ошибаюсь баги с множественными числами были пофиксены. См. ошибки в переводе.
Скажите,пожалуйста,как правильно произносится и склоняется слово "влазить" ..."я влажу"-правильно?
Правильно. Когда возникают такие вопросы, заглядывайте сюда: http://slovari.yandex.ru/dict/ushakov
но я так и не смог разобраться с этой системой плюсиков и минусиков
а с ними и не надо разбираться, для этого есть утилиты
http://drupal.org/patch/apply
Кстати, как показывает практика, на склонение слов дурно влияет модуль Panels.
Наблюдаю такую ошибку на 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"
Помогите...
В каком переводе ошибка?
Посмотрите в файле перевода. Помимо формулы (которую вы привели), там должно быть указано в переводе конкретной строки что-то типа:
msgid "1 guest"
msgid_plural "count guests"
msgstr[0] "count гость"
msgstr[1] "count гостя"
msgstr[2] "count гостей"
ошибка проявляется только на комментариях, при том, что прописано правильно:
#: 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] просмотров"
===
Это баг, я его пропустил, меа кульпа... Стал смотреть примеры для ответа вам, увидел ошибку.
Надо убрать [2], т.е. вместо - msgstr[2] "count[2] просмотров" должно быть - msgstr[2] "count просмотров". С "комментариями" и т.п. - аналогично.
попробовал заменить count[2] на count - это не помогает. по прежнему 53 просмотра и 40 просмотров но 2 новых комментария и 6 новых комментария
Внимательно еще раз проверьте. Формула одна и если она правильно отрабатывается в одном случае, то должна и в другом вести себя так же. Возможно строки с "комментария" продублированы.
Обновление до 5.2 не помогло...
Ну раз никто не ответил, пришлось чинить самому Это все было из-за модуля themesettings; выключил его, и о чудо!
drupal 6.14
template.php
<?php function numberEnd($number, $titles) {
$cases = array (2, 0, 1, 1, 1, 2);
return $titles[ ($number%100>4 && $number%100<20)? 2 : $cases[min($number%10, 5)] ];
};?>
В шаблон (в моем случае Views)
<?php $a = $fields['comment_count']->content;echo $a.' комментари'.numberEnd($a, array('й','я','ев'));?>