msgbartop
Создание и раскрутка сайтов, продвижение в ТОП
msgbarbottom







26 Июн 13 Очеловечиваем языки программирования

Очень часто на сайтах можно встретить надписи, подобные следу­ющей:

«Количество тем в форуме: 31»

Это все ничего. Хуже, когда встречается такое:

«В форуме 31 тем» или «Выбрано 1 из 38 темы».

Все очень просто: число берется сценарием из базы или внешнего файла и помещается в текстовую заготовку. А написать разные вариан­ты окончаний для исчисляемого слова программист просто поленился или не догадался.

У проблемы есть простое решение. Нужно написать функцию, изменяющую окончание исчисляемого слова, а вызывая функцию, пе­редавать ей в качестве параметра число, тип склонения и (в моем вари­анте функции) само исчисляемое слово. Вот пример такой функции (на примере PHP):

<?php

Function numDeclin($text,$type,$numero)

{

$declins = array();

$declins[”I"] = array("","a","bi");

$declins["Ik1"] = аггау("ок","ка","ки");

Очеловечиваем языки.

4.7

подпись: 4.7$declins["Ik2"] = аггау("ек","ка","ки"); $declins["II"] = аггау("ов","","а"); $declins["IIn"] = аггау("й","е","я"); $declins["IIj"] = аггау("ев","й","я"); $declins["III"] = аггау("ей","ь","и"); $declins["IIIer"] = аггау("ерей","ь","ери");

$lc=substr($numero, strlen($numero)-1,1); if(strlen($numero)>"1" && substr($numero, strlen($ numero)-2,1)=="1")

{$cntr = $declins[$type][0];} elseif($lc=="1")

{$cntr = $declins[$type][1];} elseif($lc>"1" && $lc<"5")

{$cntr = $declins[$type][2];} else

{$cntr = $declins[$type][0];} return $numero." ".$text.$cntr;

}

?>

Здесь в функцию numDeclin передаются параметры $text (ис­числяемое слово), $type (тип склонения) и $numero (число, влияю­щее на конечный вид фразы).

Затем в двухмерный массив заносятся все распространенные типы склонения, каждый — с набором окончаний следующих форм: родительный падеж множественного числа (35 листов, 17 мгновений, 11 скобок), именительный падеж единственного числа (1 окно, 31 дом) и родительный падеж единственного числа (2 девушки, 3 товарища, 24 дочери). Исключения, если требуется, можно написать самостоя­тельно. А типы склонения, не использующиеся на сайте, можно вообще выкинуть из массива, чтобы код был короче.

Наконец, все эти три случая просто расшифровываются услов­ными операторами, а в конце возвращается строка, состоящая из числа, привязанного неразрывным пробелом к исчисляемому слову, оформ­ленному нужным окончанием. Естественно, функцию можно модифи­цировать, чтобы возвращалось только нужное окончание, тогда доста­точно будет передать в функцию число объектов и тип склонения.

Вызывается функция так (при $komm — числе комментариев):

<?php

Echo numDeclin("KOMMeHTap^’,"IIj",$komm);

?>

В результате всех этих манипуляций часть текстов на сайте вы­глядит не технично, а вполне естественно. Мысль, изложенную в главе, легко развить, написав функции для спряжения глаголов, если в этом есть необходимость.

Другой частый случай — внешний вид дат.

Чаще всего даты, встречающиеся на сайтах, оформлены как от­четы. «Документ изменен 24.06.04». «Добавлено: 2005 Jan 13». Иногда такое появляется из-за того, что зарубежную систему управления сай­том ее пользователь не перевел на русский язык; иногда — из-за эко­номии кода.

А ведь решение заключается в добавлении одной строчки кода и модификации другой.

Было:

<?

Echo "Сегодня ".date("d. m.y"); // Вывод: «Сегодня 01.07.07»

?>

Стало:

<?

$months arr = array("", "января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря");

Echo "Сегодня ".date("j")." ". $months_arr[date("n")]." ".date("Y")." года";

// Вывод: «Сегодня 1 июля 2 0 07 года»

?>

Второй вариант выглядит гораздо более человечным. Всего-то: добавили массив, содержащий названия месяцев в родительном паде­же, причем первый (нулевой в нумерации языка PHP) элемент пустой, потому что он не будет использоваться вообще, а вызываем нужный элемент этого массива с помощью числа, соответствующего номеру ме­сяца. И по мелочи: в формате дня месяца выбираем тот, который вы­водит число без ведущего нуля, а год выводим полностью, а не только последние две цифры.

Зря говорят, что лень — двигатель прогресса. Двигатель прогресса в плане развития инструментов — это постоянные мысли о том, кто бу­дет этим инструментом пользоваться.

Комментарии закрыты.