Ratibor |
|
---|---|
Предлагаю прекратить зоопарк с окончаниями.
Пример: Найдено 1 совпадений Добавить в function.php(или еще куда): // Функция предназначена для вывода численных результатов с учетом // склонения слов, например: "1 ответ", "2 ответа", "13 ответов" и т.д. // // $digit — целое число // можно вместе с форматированием, например "<b>6</b>" // // $expr — массив, например: array("ответ", "ответа", "ответов"). // можно указывать только первые 2 элемента, например для склонения английских слов // (в таком случае первый элемент - единственное число, второй - множественное) // // $onlyword - если true, то выводит только слово, без числа // необязательный параметр function declension($digit,$expr,$onlyword=false) { if(empty($expr[2])) $expr[2]=$expr[1]; $i=preg_replace('/[^0-9]+/s','',$digit)%100; //intval не всегда корректно работает if($onlyword) $digit=''; if($i>=5 && $i<=20) $res=$digit.' '.$expr[2]; else { $i%=10; if($i==1) $res=$digit.' '.$expr[0]; elseif($i>=2 && $i<=4) $res=$digit.' '.$expr[1]; else $res=$digit.' '.$expr[2]; } return trim($res); } Пример использования: echo 'Мне уже '.declension('<b>17</b>',array('год','года','лет')).'!'; // выведет «Мне уже <b>17</b> лет!»Код не мой, нашел в закромах инета. Не задавай глупых вопросов, не услышишь вранья.
|
Dayver |
|
---|---|
Оооо эт то что доктор прописал.....давно муляет глаза. Я тоже за такую поправку
Pavlo Tkachenko aka Dayver
|
NovoKain |
|
---|---|
Чую что не всё тут так просто... :)
|
Trustmaster |
|
---|---|
В определенных местах использовать можно было бы, но проблема в том что это далеко не всем языкам нужно. А научить Сед склонять все и везде - это надо полностью языковую систему переделывать.
May the Source be with you!
|
Ratibor |
|
---|---|
Trustmaster : В определенных местах использовать можно было бы, но проблема в том что это далеко не всем языкам нужно.Да никакой там проблеммы нет, все вписывается в яыковые(lng) файлы, если какому то языку не надо склонять, то там так и остается одно значение, а если надо склонять, то вписать нужные склонения. Все прикручивается за минуту. Не задавай глупых вопросов, не услышишь вранья.
|
Trustmaster |
|
---|---|
Ну тогда это в языковом файле и надо реализовывать, не трогая остальную систему.
May the Source be with you!
|
Ratibor |
|
---|---|
#637 Trustmaster : Ну тогда это в языковом файле и надо реализовывать, не трогая остальную систему.Не передергивай. Функцию все равно вносить надо. Не задавай глупых вопросов, не услышишь вранья.
|
Ratibor |
|
---|---|
Решил прикрутить к поиску нормальные окончания.
Внес функцию в functions.php Изменил в search.ru.lang.php строку 36: $L['plu_match'] = "совпадений"; заменил на: $L['plu_match'] = "'совпадение','совпадения','совпадений'"; в файле search.phpстроку 537: $plugin_body .= "<h4>".$L['Pages']." : ".$L['plu_found']." ".$items." ".$L['plu_match']."</h4>"; заменил на: $plugin_body .= "<h4>".$L['Pages']." : ".$L['plu_found']." ".declension($items,array($L['plu_match']))."</h4>"; В итоге количество найденных страниц пишет, а вот одно из этих ('совпадение','совпадения','совпадений')слов нет. Вместо слова пустота. Потом попробовал изменить на: $plugin_body .= "<h4>".$L['Pages']." : ".$L['plu_found']." ".declension($items,array('совпадение','совпадения','совпадений'))."</h4>"; Все стало работать как надо, но так не пойдет, т.к. теряется мультиязычность. Почему не работает declension($items,array($L['plu_match']))а declension($items,array('совпадение','совпадения','совпадений'))работает нормально ? Не задавай глупых вопросов, не услышишь вранья.
|
Ratibor |
|
---|---|
Спасибо Boss за подсказку.
В общем заработало. Итак вносим функцию в functions.php далее в search.ru.lang.php строку 36: $L['plu_match'] = "совпадений"; меняем на: $L['plu_match'] = array('совпадение','совпадения','совпадений'); далее в файле search.php строку 537: $plugin_body .= "<h4>".$L['Pages']." : ".$L['plu_found']." ".$items." ".$L['plu_match']."</h4>"; меняем на: $plugin_body .= "<h4>".$L['Pages']." : ".$L['plu_found']." ".declension($items,$L['plu_match'])."</h4>"; Вуаля :) Вернее в search.php несколько таких строк надо изменить: поиском ищем: ".$items." ".$L['plu_match']."и меняем все найденные строки на: ".declension($items,$L['plu_match'])." в английском варианте в ланг файл вписать $L['plu_match'] = array('match','matches'); для языков где нет склонения придетя вписать типа: $L['plu_match'] = array('match','match'); Trustmaster : А научить Сед склонять все и везде - это надо полностью языковую систему переделывать.Trustmaster я думаю можно вности эту функцию, т.к. ничего не страдает. Изменения минимальные и не нужны какие то глобальные языковые переделки. Не задавай глупых вопросов, не услышишь вранья.
|
|
Отредактировано: Ratibor (04.09.2008 16:52, 16 лет назад) |
Boss |
|
---|---|
Для других языков сложновато. Если учесть, что им это не ачем, то думаю, будут недовольства. :) Надо просто доработать функцию. Чтобы брался и массив и переменная с единственным значением.
|
Ratibor |
|
---|---|
# Boss : Для других языков сложновато. Если учесть, что им это не ачем, то думаю, будут недовольства.Я думаю не обломаются несколько слов дважды вписать. В данный момент страдают намного больше людей от таких окончаний. Сейчас это просто надругательство над русским языком, да и как минимум английским тоже. Ланг файлы все равно делают не "блондинки". Да и не так много мест где нужно делать склонения. P.S. Я конечно не против доработать, но за столько дней существования темы не было НИ ОДНОГО дельного предложения. Не задавай глупых вопросов, не услышишь вранья.
|
Boss |
|
---|---|
Что-нибудь типа:
function declension($digit,$expr,$onlyword=false)
{
if(is_array($expr))
{
if(empty($expr[2])) $expr[2]=$expr[1];
$i=preg_replace('/[^0-9]+/s','',$digit)%100; //intval не всегда корректно работает
if($onlyword) $digit='';
if($i>=5 && $i<=20) $res=$digit.' '.$expr[2];
else
{
$i%=10;
if($i==1) $res=$digit.' '.$expr[0];
elseif($i>=2 && $i<=4) $res=$digit.' '.$expr[1];
else $res=$digit.' '.$expr[2];
}
}
else
{
$res = $digit.' '.$expr;
}
return trim($res);
}
|
Ratibor |
|
---|---|
Boss теперь нормально работает.
В общем кому надо склонения, вставляют array, а кому не надо, оставляют lang файлы как есть. Trustmaster Если не хочешь глобально вносить функцию, то ее можно внести в search.php. Но вносить ее в каждый плагин отдельно - имхо изврат. Не задавай глупых вопросов, не услышишь вранья.
|
|
Отредактировано: Ratibor (04.09.2008 17:34, 16 лет назад) |
esclkm |
|
---|---|
Идея супер! интересно она вкючена в реализацию. блин хочу скачать... посмотреть и ощутить седитию-н
littledev.ru - мой маленький зарождающийся блог о котонти.
снижение стоимости программирования и снижение стоимости производства разные вещи. Первое можно скорее сравнить с раздачей работникам дешевых инструментов, чем со снижением зарплаты |
Trustmaster |
|
---|---|
Этой штуковины там еще нет. Подожди немного, ключики дам.
May the Source be with you!
|