-Поиск по дневнику

Поиск сообщений в akry

 -Подписка по e-mail

 

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 21.08.2007
Записей: 4917
Комментариев: 25572
Написано: 40060


Множественное число в русском языке для PHP

Пятница, 18 Июля 2008 г. 00:30 + в цитатник

«Процитировано 3 раз». «Тры раз — нэ пидораз». «Этот надпис рэжет глаз».

Специально для тех, кто оформляет интерфейсы, не повторяйте оплошности ValeZ. Образовать множественное число очень просто. Вот для этого кусок кода на PHP:

code:
function ru_lang_plural ($num, $str0, $str1, $str2)
{
 if ($num == 0 || ($num > 4 && $num < 21)) {
  return $str0;   // 0 цитат, 5 цитат
 } else {
  if ($num > 10) $n = $num % 10;
   else $n = $num;
  
  if ($n == 1) return $str1;      // 1 цитата
  if ($n > 1 && $n < 5) return $str2;     // 2 цитаты
 };
}

Если строки хранятся в отдельном файле или в БД (а они должны храниться отдельно в любом серьёзном проекте), можно работать с ними например так:

code:
$lang = array (
  'str1' => 'В вашей корзине {%0, товар}, благослави вас Господь!',
  'str2' => 'У нас есть {%0; отличная причина} чтобы выпить!'
);

$plurals = array (
 // ноль, одно, два
  'товар' => array ('товаров', 'товар', 'товара'),
  'отличная причина' => array ('отличных причин', 'отличная причина', 'отличные причины')
);


function ru_lang_plural ($num, $plurals)
{
 if ($num == 0 || ($num > 4 && $num < 21)) {
  return $plurals[0];   // 0 цитат, 5 цитат
 } else {
  if ($num > 10) $n = $num % 10;
   else $n = $num;
 
  if ($n == 1) return $plurals[1];      // 1 цитата
  if ($n > 1 && $n < 5) return $plurals[2];     // 2 цитаты
 };
}


function parse_lang_str ($strName, $vars = array ())
{
  global $lang;
 
  // всякие проверки, разделы и т. п. опущены для краткости
  $str = $lang[$strName];
  if ($vars) {
   foreach ($vars as $N => $value) {
    $GLOBALS['_value'] = $value;
    $str = preg_replace_callback
         (
          "/\{%($N)[,;](.+?)\}/",
          create_function(
                 '$matches',
                 'global $plurals, $_value;
                  return $_value . '&nbsp;' . ru_lang_plural($_value, $plurals[trim($matches[2])]);'
            ),
          $str
         );
   };
  };
 
  return $str;
}

for ($n = 0; $n < 12; ++$n) {
 echo $n . "<Br>";
 echo parse_lang_str ('str1', array (0=> $n)) . '<Br>';
 echo parse_lang_str ('str2', array (0=> $n)) . '<Br>';
 echo "<br>";
};


Код упрощённый, но вполне рабочий.

Да пребудет с нами русский язык.

++ интересно, зачем здесь в текстовом редакторе стиль «code», если он всё равно на это чихает в итоговой публикации?

Рубрики:  Идеи и мысли
Метки:  

natasha_poroshina   обратиться по имени Пятница, 18 Июля 2008 г. 01:15 (ссылка)
:) за что ты так товарища Админа?
Ответить С цитатой В цитатник
Марика_К   обратиться по имени Пятница, 18 Июля 2008 г. 01:23 (ссылка)
natasha_poroshina, да правильно он его. Как следует делать не хочет, а помощи не принимает. Зачем тогда это вообще все надо?
Ответить С цитатой В цитатник
akry   обратиться по имени Пятница, 18 Июля 2008 г. 02:32 (ссылка)
Яфоль, прекрасные леди.
Просто критиковать — безыдейно. А тут вполне рабочий конструктивный код, который может быть сделает мир чуть-чуть лучше на слух.
Я считаю, что хотя бы при работе над коммерческим проектом нужно такие сопли убирать. Особенно если это не сложно. Всё таки грешно великую русскую языка в албанский корёжить.
А чтобы не говорили, «раз такой умный, так сделай», я и сделал.
Забавно, что как раз местные проггеры скорее всего эту (или подобную) штуку использовать не будут. У советских — собственная гордость и «я просто не понимаю приоритетов проекта и как все загружены более важными задачами». Сам был программистом, наперёд знаю, что скажут :)

p.s. Есть возможность значимо (в тысячи раз) ускорить код для коммерческих проектов. Где-то у меня есть код для php extension — давно для своих нужд писал…
Ответить С цитатой В цитатник
alerd   обратиться по имени Пятница, 18 Июля 2008 г. 09:59 (ссылка)
Штука полезная и правильная:-)

Еще бы мегаразработчик тебя бы услышал было бы совсем хорошо. У меня сложилось такое ощущение, что Лируша - это полигон для Valez-овских экзерсисов. При этом чудо-разработчик редко кого слушает.
У И.Черского в старом дневе (http://www.cherski.ru/) довольно показательная переписка с Valez, где Игорь просил:
Valez, если ты сделал х**ню, то сделай кнопку "отключить х**ню", а Valez в ответ на это писал, что могу сделать персонально для тебя, а для всех нет - ей тогда пользоваться не будут. Или что-то типа того (http://www.cherski.ru/post59526580/).
Софт пишется насколько я понял Valez "на коленке", а отлаживается на кошках польззователях. Если количество гневных комментов зашкалит, то Valez что-то сделает, а если нет - так и нет. Во всяком случае, после последних перетрубаций рейтинг у Лируши на Яндексе снизился в два раза, а Valez все пофиг. Он после этого (среди оставшихся пользователей) социологический опрос затеял - за что вы любите Li.ru. Удивительно!
Ответить С цитатой В цитатник
Юрий_Мишенев   обратиться по имени Суббота, 19 Июля 2008 г. 12:03 (ссылка)
Да пребудет.
Ответить С цитатой В цитатник
Комментировать К дневнику Страницы: [1] [Новые]
 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку