pluralize в PHP

У меня есть много информации для отображения из базы данных. Некоторые из них французские, другие – английский. Некоторые из них являются уникальными, некоторые из них …

Вопрос: как вы управляете всем этим вариантом в PHP?

ЕСЛИ ВЫПОЛНИТЬ МАШИНУ (со всем текстом)

другой метод …

теперь проблема поднимается на список запахов, у некоторых есть один (запах), у других есть много (запахов), помещающих s или нет, это боль ….. помогите!

благодаря

Лучший способ ИМО – иметь массив всех ваших правил плюрализации для каждого языка, т. array('man'=>'men', 'woman'=>'women'); и написать функцию pluralize () для каждого сингулярного слова.

Вы можете взглянуть на инфлектор CakePHP для некоторого вдохновения.

https://github.com/cakephp/cakephp/blob/master/src/Utility/Inflector.php

Возможно, вы захотите посмотреть расширение gettext . Более конкретно, это похоже на то, что ngettext() будет делать то, что вы хотите: он правильно умножает слова, если у вас есть число, на которое нужно рассчитывать.

 print ngettext('odor', 'odors', 1); // prints "odor" print ngettext('odor', 'odors', 4); // prints "odors" print ngettext('%d cat', '%d cats', 4); // prints "4 cats" 

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

Вы можете попробовать эту функцию, я написал:

 /** * Pluralizes a word if quantity is not one. * * @param int $quantity Number of items * @param string $singular Singular form of word * @param string $plural Plural form of word; function will attempt to deduce plural form from singular if not provided * @return string Pluralized word if quantity is not one, otherwise singular */ public static function pluralize($quantity, $singular, $plural=null) { if($quantity==1 || !strlen($singular)) return $singular; if($plural!==null) return $plural; $last_letter = strtolower($singular[strlen($singular)-1]); switch($last_letter) { case 'y': return substr($singular,0,-1).'ies'; case 's': return $singular.'es'; default: return $singular.'s'; } } 

Применение:

 pluralize(4, 'cat'); // cats pluralize(3, 'kitty'); // kitties pluralize(2, 'octopus', 'octopii'); // octopii pluralize(1, 'mouse', 'mice'); // mouse 

Очевидно, есть много исключительных слов, что эта функция не будет плюрализовать правильно, но это то, что аргумент $plural для 🙂

Взгляните на Википедию, чтобы увидеть, насколько сложна плюрализация!

Наслаждайтесь: https://github.com/ICanBoogie/Inflector

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

Если вы собираетесь спуститься по пути написания своей собственной функции плюрализации, вы можете найти это алгоритмическое описание плюрализации полезным:

http://www.csse.monash.edu.au/~damian/papers/HTML/Plurals.html

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

http://www.eval.ca/2007/03/03/php-pluralize-method/

Эта ссылка содержит самую полезную функцию, которую я могу найти http://www.kavoir.com/2011/04/php-class-converting-plural-to-singular-or-vice-versa-in-english.html

Пользовательское, прозрачное и бесплатное решение. Не уверен в скорости.

 /** * Custom plural */ function splur($n,$t1,$t2,$t3) { settype($n,'string'); $e1=substr($n,-2); if($e1>10 && $e1<20) { return $n.' '.$t3; } // "Teen" forms $e2=substr($n,-1); switch($e2) { case '1': return $n.' '.$t1; break; case '2': case '3': case '4': return $n.' '.$t2; break; default: return $n.' '.$t3; break; } } 

Использование на украинском / русском языках:

 splur(5,'сторінка','сторінки','сторінок') // 5 сторінок splur(4,'сторінка','сторінки','сторінок') // 4 сторінки splur(1,'сторінка','сторінки','сторінок') // 1 сторінка splur(12,'сторінка','сторінки','сторінок') // 12 сторінок splur(5,'страница','страницы','страниц') // 5 страниц splur(4,'страница','страницы','страниц') // 4 страницы splur(1,'страница','страницы','страниц') // 1 страница splur(12,'страница','страницы','страниц') // 12 страниц