Склонение существительных с цифрами. Склонение существительных с цифрами Защита от вредоносных URL-запросов

Получает строку перевода единственного или множественного числа, ту которая соответствует указанному числу (1 комментарий, 2 комментария). Функция локализации.

В функцию указываются строки перевода и число, далее:

  • Если передано единственное число (1), то функция вернет переведенное значение первого параметра: $single .
  • Если передано множественное число (2 3 4), то функцию вернет переведенное значение второго параметра: $plural .
  • Если не удастся получить перевод нужной строки из файла перевода, то функция вернет оригинальное значение строки.

Если указан ID перевода ($domain). Функция передаст параметры $single, $plural, и $number в метод Translations::translate_plural() . Затем результат и все параметры будут переданы в фильтр ngettext .

Хуки из функции
Возвращает

Строку. Переведенную или оригинальную строку указанную в параметре $single или $plural , в зависимости от переданного числа $number .

Использование

_n($single, $plural, $number, $domain) $single(строка) (обязательный) Строка перевода, которая будет использована при $number = 1. $plural(строка) (обязательный)

Строка перевода, которая будет использована при $number больше 1.

Для русского языка, где часто используется 3 формы (1 яблоко, 3 яблока, 5 яблок), эту функцию тоже можно использовать, но для этого нужно будет грамотно настроить "Формы множественного числа" для.mo файла в программе Poedit.

$number(число) (обязательный) Число (множественное или единственное), которое будет определять какую строку перевода нужно использовать $single или $plural . $domain(строка) Домен (идентификатор файла перевода), который определяет какой файл использовать для перевода.
По умолчанию: "default"

Примеры

#1. Простое использование, для наглядности

echo _n("%s star", "%s stars", 1); // Выведет: %s star echo _n("%s star", "%s stars", 3); // Выведет: %s stars
#2. C файлом перевода

Также в этом файле перевода указаны переводы для множественных чисел, тогда:

Echo _n("%s star", "%s stars", 1, "textdomain"); // Вернет: %s звезда echo _n("%s star", "%s stars", 4, "textdomain"); // Вернет: %s звезды echo _n("%s star", "%s stars", 6, "textdomain"); // Вернет: %s звезд

#3. Заменяем %s на нужное число.

Для этого используем PHP функцию sprintf() . Так делается во всех темах:

$rating = 1; echo sprintf(_n("%s star", "%s stars", $rating, "your_textdomain"), $rating); // Вернет: 1 звезда $rating = 4; echo sprintf(_n("%s star", "%s stars", $rating, "your_textdomain"), $rating); // Вернет: 4 звезды $rating = 6; echo sprintf(_n("%s star", "%s stars", $rating, "your_textdomain"), $rating); // Вернет: 6 звезд

#4. Пример из файла /wp-admin/edit-comments.php

if ($approved > 0) $messages = sprintf(_n("%s comment approved", "%s comments approved", $approved), $approved);

Код n : wp-includes/l10n.php WP 5.2.1

translate_plural($single, $plural, $number); /** * Filters the singular or plural form of a string. * * @since 2.2.0 * * @param string $translation Translated text. * @param string $single The text to be used if the number is singular. * @param string $plural The text to be used if the number is plural. * @param string $number The number to compare against to use either the singular or plural form. * @param string $domain Text domain. Unique identifier for retrieving translated strings. */ return apply_filters("ngettext", $translation, $single, $plural, $number, $domain); }

Гораздо безопаснее воровать огромные суммы
с помощью шариковой ручки, чем небольшие
посредством пистолета.
Уоррен Баффет.

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

Р ечь идёт о склонении существительных и прилагательных в зависимости от числа , с которым они связаны. Например: 1 комментарий, 2 комментария, 5 комментариев и т. д. Как это сделать?

Е сли вам лень делать лишние телодвижения, можно просто использовать двоеточие и забыть про склонения с цифрами. Выглядит это так:


Комментарии: 4
или
Комментариев: 12

Н о мы не ищем лёгких путей. Мы ищем правильные пути. Предлагаю вам функцию, которая раз и навсегда решит проблему склонения существительных с цифрами. В двух вариантах: PHP и Javascript-версиях.

PHP

function incline($words,$n){ if($n%100>4 && $n%100

Javascript

function incline(words,n){ return words[(n%100>4 && n%100

В обоих вариантах функция имеет два параметра:

  • words - массив с 3-мя элементами - вариантами написания слов
  • n - само число

Ч тобы знать, какие именно слова писать в массиве «words », нужно просто просклонять слова, используя правило «1-2-5»:

  • первое слово - словоформа цифры 1 (пример: 1 комментарий)
  • второе слово - словоформа цифры 2 (пример: 2 комментария)
  • третье слово - словоформа цифры 5 (пример: 5 комментариев)

И так, примеры.

Д опустим, мы хотим написать предложение «Всего на сайте у нас 123 комментария».

В PHP мы напишем так:

Echo "Всего на сайте у нас ".$comment_count." ".incline(array("комментарий","комментария","комментариев"), $comment_count);

В Javascript - так:

Alert("Всего на сайте у нас " + comment_count + " " + incline(["комментарий","комментария","комментариев"], comment_count));

И , конечно же, в переменных «$comment_count » и «comment_count » хранится число (количество комментариев в данном случае).

Д ругие примеры.

Д опустим,

$number = 5;

Т огда имеем

Echo $number." ".incline(array("яблоко","яблока","яблок"), $number); // 5 яблок echo $number." ".incline(array("попугай","попугая","попугаев"), $number); // 5 попугаев echo $number." ".incline(array("слон","слона","слонов"), $number); // 5 слонов

Т еперь конкретный пример для WordPress .

  • 1. Добавляем функцию «incline » в файл «functions.php » в вашем шаблоне.
  • 2. В этот же файл «functions.php » добавляем такой код:
    function russian_comments_number(){ global $post; echo $post->comment_count." ".incline(array("комментарий","комментария","комментариев"), $post->comment_count); } add_filter("comments_number", "russian_comments_number");

В заключение

Д анной функцией я пользуюсь уже очень давно и она делает сайт намного дружелюбнее. При склонении существительных с цифрами делается более читабельным и сайт в целом выглядет «человечнее».

Итак, вы только что установили свой сайт на WordPress (условимся, что наш WordPress на русском языке, если нет — то будет одним хуком меньше). Также будем считать, что вы уже определились с темой, которую будете использовать, либо же вы решили создать свою собственную тему — одно из двух.

В этом посту я перечислю не просто хуки, «которые прикольные», а хуки, которые необходимы к установке на каждый WordPress-сайт. Надеюсь, благодаря моим постам, ваши сайты (и все сайты рунета) станут чуточку лучше.

1. Склонение дат на сайте

function true_russian_date_forms($the_date = "" ) { if ( substr_count ($the_date , "---" ) > 0 ) { return str_replace ("---" , "" , $the_date ) ; } // массив замен для русской локализации движка и для английской $replacements = array ( "Январь" => "января" , // "Jan" => "января" "Февраль" => "февраля" , // "Feb" => "февраля" "Март" => "марта" , // "Mar" => "марта" "Апрель" => "апреля" , // "Apr" => "апреля" "Май" => "мая" , // "May" => "мая" "Июнь" => "июня" , // "Jun" => "июня" "Июль" => "июля" , // "Jul" => "июля" "Август" => "августа" , // "Aug" => "августа" "Сентябрь" => "сентября" , // "Sep" => "сентября" "Октябрь" => "октября" , // "Oct" => "октября" "Ноябрь" => "ноября" , // "Nov" => "ноября" "Декабрь" => "декабря" // "Dec" => "декабря" ) ; return strtr ($the_date , $replacements ) ; } // если хотите, вы можете приминить только некоторые из фильтров add_filter ("the_time" , "true_russian_date_forms" ) ; add_filter ("get_the_time" , "true_russian_date_forms" ) ; add_filter ("the_date" , "true_russian_date_forms" ) ; add_filter ("get_the_date" , "true_russian_date_forms" ) ; add_filter ("the_modified_time" , "true_russian_date_forms" ) ; add_filter ("get_the_modified_date" , "true_russian_date_forms" ) ; add_filter ("get_post_time" , "true_russian_date_forms" ) ; add_filter ("get_comment_date" , "true_russian_date_forms" ) ;

Функция склонения дат будет работать как для постов и страниц, так и для комментариев WordPress.

2. Сообщения об ошибках при попытке авторизации пользователя на сайте

Если при авторизации допустить ошибку при вводе логина или пароля, WordPress указывает, что именно было введено неправильно. Например «ОШИБКА: Неверное имя пользователя.» или «ОШИБКА: Введённый вами пароль пользователя admin неверен.»

Для того, чтобы WordPress не сообщал лишней информации, мы на оба случая сделаем общее сообщение об ошибке, вставив следующий код в functions.php .

Подробнее о замене сообщений об ошибках вы можете почитать .

3. Защита от вредоносных URL-запросов

if (strpos ($_SERVER [ "REQUEST_URI" ] , "eval(" ) || strpos ($_SERVER [ "REQUEST_URI" ] , "CONCAT" ) || strpos ($_SERVER [ "REQUEST_URI" ] , "UNION+SELECT" ) || strpos ($_SERVER [ "REQUEST_URI" ] , "base64" ) ) { @header ("HTTP/1.1 400 Bad Request" ) ; @header ("Status: 400 Bad Request" ) ; @header ("Connection: Close" ) ; @exit ; }

4. Защита от автоматического спама

function true_stop_spam( $commentdata ) { $fake = trim ($_POST [ "comment" ] ) ; // обычное поле комментирования мы скроем через CSS if (!empty ($fake ) ) // заполнение его роботами будет приводить к ошибке, комментарий отправляться не будет wp_die("Спамный коммент!" ) ; $_POST [ "comment" ] = trim ($_POST [ "true_comment" ] ) ; // затем мы присвоим ему значение поля комментария, которое для людей return $commentdata ; } add_filter ("pre_comment_on_post" , "true_stop_spam" ) ;

5. Скрываем имена пользователей из HTML-кода комментариев

Этот хук позволит удалить все имена пользователей из CSS-классов комментариев. Если же у вас стили комментария администратора отличаются от стилей остальных комментов, то благодаря этому хуку вы также можете добавить какой-нибудь особенный класс именно для администратора сайта. Читайте подробнее .

function true_remove_css_class( $classes ) { foreach ( $classes as $key => $class ) { if (strstr ($class , "comment-author-" ) ) { unset ( $classes [ $key ] ) ; } } return $classes ; } add_filter ("comment_class" , "true_remove_css_class" ) ;

6. Запрет пингбэков и трэкбэков на самого себя

После добавления этого кода в functions.php , трэкбэки больше не будут появляться, когда вы будете ссылаться на другие посты вашего сайта.

function true_disable_self_ping( &$links ) { foreach ( $links as $l => $link ) if ( 0 === strpos ( $link , get_option( "home" ) ) ) unset ($links [ $l ] ) ; } add_action ( "pre_ping" , "true_disable_self_ping" ) ;

7. Скрываем версию WordPress

По умолчанию можно узнать версию установленного на сайте WordPress, заглянув в исходный HTML-код или в код RSS. Для того, чтобы не предоставлять злоумышленникам лишней информации, вставляем это в funcions.php.



Просмотров