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;
 | 
						|
	}
 | 
						|
 | 
						|
}
 |