148 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			148 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace Illuminate\Support;
 | 
						|
 | 
						|
use Doctrine\Inflector\CachedWordInflector;
 | 
						|
use Doctrine\Inflector\Inflector;
 | 
						|
use Doctrine\Inflector\Rules\English;
 | 
						|
use Doctrine\Inflector\RulesetInflector;
 | 
						|
 | 
						|
class Pluralizer
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * Uncountable word forms.
 | 
						|
     *
 | 
						|
     * @var array
 | 
						|
     */
 | 
						|
    public static $uncountable = [
 | 
						|
        'audio',
 | 
						|
        'bison',
 | 
						|
        'cattle',
 | 
						|
        'chassis',
 | 
						|
        'compensation',
 | 
						|
        'coreopsis',
 | 
						|
        'data',
 | 
						|
        'deer',
 | 
						|
        'education',
 | 
						|
        'emoji',
 | 
						|
        'equipment',
 | 
						|
        'evidence',
 | 
						|
        'feedback',
 | 
						|
        'firmware',
 | 
						|
        'fish',
 | 
						|
        'furniture',
 | 
						|
        'gold',
 | 
						|
        'hardware',
 | 
						|
        'information',
 | 
						|
        'jedi',
 | 
						|
        'kin',
 | 
						|
        'knowledge',
 | 
						|
        'love',
 | 
						|
        'metadata',
 | 
						|
        'money',
 | 
						|
        'moose',
 | 
						|
        'news',
 | 
						|
        'nutrition',
 | 
						|
        'offspring',
 | 
						|
        'plankton',
 | 
						|
        'pokemon',
 | 
						|
        'police',
 | 
						|
        'rain',
 | 
						|
        'recommended',
 | 
						|
        'related',
 | 
						|
        'rice',
 | 
						|
        'series',
 | 
						|
        'sheep',
 | 
						|
        'software',
 | 
						|
        'species',
 | 
						|
        'swine',
 | 
						|
        'traffic',
 | 
						|
        'wheat',
 | 
						|
    ];
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get the plural form of an English word.
 | 
						|
     *
 | 
						|
     * @param  string  $value
 | 
						|
     * @param  int  $count
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    public static function plural($value, $count = 2)
 | 
						|
    {
 | 
						|
        if ((int) abs($count) === 1 || static::uncountable($value)) {
 | 
						|
            return $value;
 | 
						|
        }
 | 
						|
 | 
						|
        $plural = static::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 = static::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 = ['mb_strtolower', 'mb_strtoupper', 'ucfirst', 'ucwords'];
 | 
						|
 | 
						|
        foreach ($functions as $function) {
 | 
						|
            if ($function($comparison) === $comparison) {
 | 
						|
                return $function($value);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        return $value;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get the inflector instance.
 | 
						|
     *
 | 
						|
     * @return \Doctrine\Inflector\Inflector
 | 
						|
     */
 | 
						|
    public static function inflector()
 | 
						|
    {
 | 
						|
        static $inflector;
 | 
						|
 | 
						|
        if (is_null($inflector)) {
 | 
						|
            $inflector = new Inflector(
 | 
						|
                new CachedWordInflector(new RulesetInflector(
 | 
						|
                    English\Rules::getSingularRuleset()
 | 
						|
                )),
 | 
						|
                new CachedWordInflector(new RulesetInflector(
 | 
						|
                    English\Rules::getPluralRuleset()
 | 
						|
                ))
 | 
						|
            );
 | 
						|
        }
 | 
						|
 | 
						|
        return $inflector;
 | 
						|
    }
 | 
						|
}
 |