for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
/**
* Created by PhpStorm.
* User: alex
* Date: 9/05/20
* Time: 4:00 AM
*/
namespace POData;
use AlgoWeb\ODataMetadata\MetadataManager;
* Class Pluralizer - hoisted from Laravel to support string pluralisation
* @package POData
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(string $value, $count = 2)
if ((int) abs($count) === 1 || static::uncountable($value)) {
return $value;
}
$plural = MetadataManager::pluralize($value);
return static::matchCase($plural, $value);
* Determine if the given value is uncountable.
* @return bool
protected static function uncountable($value)
return in_array(strtolower($value), static::$uncountable);
* Attempt to match the case on two strings.
* @param string $comparison
protected static function matchCase($value, $comparison)
$functions = ['mb_strtolower', 'mb_strtoupper', 'ucfirst', 'ucwords'];
foreach ($functions as $function) {
if (call_user_func($function, $comparison) === $comparison) {
return call_user_func($function, $value);