104 lines
1.7 KiB
PHP
104 lines
1.7 KiB
PHP
|
<?php namespace Illuminate\Support;
|
||
|
|
||
|
use Doctrine\Common\Inflector\Inflector;
|
||
|
|
||
|
class Pluralizer {
|
||
|
|
||
|
/**
|
||
|
* Uncountable word forms.
|
||
|
*
|
||
|
* @var array
|
||
|
*/
|
||
|
public static $uncountable = array(
|
||
|
'audio',
|
||
|
'bison',
|
||
|
'chassis',
|
||
|
'compensation',
|
||
|
'coreopsis',
|
||
|
'data',
|
||
|
'deer',
|
||
|
'education',
|
||
|
'equipment',
|
||
|
'fish',
|
||
|
'gold',
|
||
|
'information',
|
||
|
'money',
|
||
|
'moose',
|
||
|
'offspring',
|
||
|
'plankton',
|
||
|
'police',
|
||
|
'rice',
|
||
|
'series',
|
||
|
'sheep',
|
||
|
'species',
|
||
|
'swine',
|
||
|
'traffic',
|
||
|
);
|
||
|
|
||
|
/**
|
||
|
* Get the plural form of an English word.
|
||
|
*
|
||
|
* @param string $value
|
||
|
* @param int $count
|
||
|
* @return string
|
||
|
*/
|
||
|
public static function plural($value, $count = 2)
|
||
|
{
|
||
|
if ($count === 1 || static::uncountable($value))
|
||
|
{
|
||
|
return $value;
|
||
|
}
|
||
|
|
||
|
$plural = Inflector::pluralize($value);
|
||
|
|
||
|
return static::matchCase($plural, $value);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the singular form of an English word.
|
||
|
*
|
||
|
* @param string $value
|
||
|
* @return string
|
||
|
*/
|
||
|
public static function singular($value)
|
||
|
{
|
||
|
$singular = Inflector::singularize($value);
|
||
|
|
||
|
return static::matchCase($singular, $value);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Determine if the given value is uncountable.
|
||
|
*
|
||
|
* @param string $value
|
||
|
* @return bool
|
||
|
*/
|
||
|
protected static function uncountable($value)
|
||
|
{
|
||
|
return in_array(strtolower($value), static::$uncountable);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Attempt to match the case on two strings.
|
||
|
*
|
||
|
* @param string $value
|
||
|
* @param string $comparison
|
||
|
* @return string
|
||
|
*/
|
||
|
protected static function matchCase($value, $comparison)
|
||
|
{
|
||
|
$functions = array('mb_strtolower', 'mb_strtoupper', 'ucfirst', 'ucwords');
|
||
|
|
||
|
foreach ($functions as $function)
|
||
|
{
|
||
|
if (call_user_func($function, $comparison) === $comparison)
|
||
|
{
|
||
|
return call_user_func($function, $value);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $value;
|
||
|
}
|
||
|
|
||
|
}
|