104 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
| <?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;
 | |
| 	}
 | |
| 
 | |
| }
 |