У меня есть много информации для отображения из базы данных. Некоторые из них французские, другие – английский. Некоторые из них являются уникальными, некоторые из них …
Вопрос: как вы управляете всем этим вариантом в 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.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 страниц