The Inflector Component
The Inflector Component¶
The Inflector component converts English words between their singular and plural forms.
$ composer require symfony/inflector
If you install this component outside of a Symfony application, you must
vendor/autoload.php file in your code to enable the class
autoloading mechanism provided by Composer. Read
this article for more details.
When you May Need an Inflector¶
In some scenarios such as code generation and code introspection, it's usually
required to convert words from/to singular/plural. For example, if you need to
know which property is associated with an adder method, you must convert from
plural to singular (
addStories() method ->
Although most human languages define simple pluralization rules, they also
define lots of exceptions. For example, the general rule in English is to add an
s at the end of the word (
books) but there are lots of
exceptions even for common words (
This component abstracts all those pluralization rules so you can convert from/to singular/plural with confidence. However, due to the complexity of the human languages, this component only provides support for the English language.
The Inflector component provides two static methods to convert from/to singular/plural:
1 2 3 4 5 6 7 8 9
use Symfony\Component\Inflector\Inflector; Inflector::singularize('alumni'); // 'alumnus' Inflector::singularize('knives'); // 'knife' Inflector::singularize('mice'); // 'mouse' Inflector::pluralize('grandchild'); // 'grandchildren' Inflector::pluralize('news'); // 'news' Inflector::pluralize('bacterium'); // 'bacteria'
Sometimes it's not possible to determine a unique singular/plural form for the given word. In those cases, the methods return an array with all the possible forms:
1 2 3 4 5 6 7
use Symfony\Component\Inflector\Inflector; Inflector::singularize('indices'); // ['index', 'indix', 'indice'] Inflector::singularize('leaves'); // ['leaf', 'leave', 'leaff'] Inflector::pluralize('matrix'); // ['matricies', 'matrixes'] Inflector::pluralize('person'); // ['persons', 'people']
This work, including the code samples, is licensed under a Creative Commons BY-SA 3.0 license.