A multilingual inflector that transforms words from singular to plural, underscore to camel case, and formats strings in various ways. Inflections are localized, the default english inflections for pluralization, singularization, and uncountable words are kept in lib/inflections/en.php.
Inflections are currently available for the following languages:
- English (
en) - French (
fr) - Norwegian Bokmal (
nb) - Portuguese (
pt) - Spanish (
es) - Turkish (
tr)
These are some examples of the inflector with the en locale (default).
<?php
use ICanBoogie\Inflector;
$inflector = Inflector::get(Inflector::DEFAULT_LOCALE);
# or
$inflector = Inflector::get('en');
# or
$inflector = Inflector::get();
# pluralize
$inflector->pluralize('post'); // "posts"
$inflector->pluralize('child'); // "children"
$inflector->pluralize('sheep'); // "sheep"
$inflector->pluralize('words'); // "words"
$inflector->pluralize('CamelChild'); // "CamelChildren"
# singularize
$inflector->singularize('posts'); // "post"
$inflector->singularize('children'); // "child"
$inflector->singularize('sheep'); // "sheep"
$inflector->singularize('word'); // "word"
$inflector->singularize('CamelChildren'); // "CamelChild"
# camelize
$inflector->camelize('active_model', Inflector::UPCASE_FIRST_LETTER);
# or
$inflector->camelize('active_model');
// 'ActiveModel'
$inflector->camelize('active_model', Inflector::DOWNCASE_FIRST_LETTER);
// 'activeModel'
$inflector->camelize('active_model/errors');
// 'ActiveModel\Errors'
$inflector->camelize('active_model/errors', Inflector::DOWNCASE_FIRST_LETTER);
// 'activeModel\Errors'
# underscore
$inflector->underscore('ActiveModel'); // 'active_model'
$inflector->underscore('ActiveModel\Errors'); // 'active_model/errors'
$inflector->underscore('Less Active Phrase'); // 'less_active_phrase'
$inflector->underscore('Number 1 Test'); // 'number_1_test'
$inflector->underscore('Johnny5 Still Alive'); // 'johnny5_still_alive'
$inflector->underscore('Lots of Spaces'); // 'lots_of_spaces'
# humanize
$inflector->humanize('employee_salary'); // "Employee salary"
$inflector->humanize('author_id'); // "Author"
# titleize
$inflector->titleize('man from the boondocks'); // "Man From The Boondocks"
$inflector->titleize('x-men: the last stand'); // "X Men: The Last Stand"
$inflector->titleize('TheManWithoutAPast'); // "The Man Without A Past"
$inflector->titleize('raiders_of_the_lost_ark'); // "Raiders Of The Lost Ark"
# ordinal
$inflector->ordinal(1); // "st"
$inflector->ordinal(2); // "nd"
$inflector->ordinal(1002); // "nd"
$inflector->ordinal(1003); // "rd"
$inflector->ordinal(-11); // "th"
$inflector->ordinal(-1021); // "st"
# ordinalize
$inflector->ordinalize(1); // "1st"
$inflector->ordinalize(2); // "2nd"
$inflector->ordinalize(1002); // "1002nd"
$inflector->ordinalize(1003); // "1003rd"
$inflector->ordinalize(-11); // "-11th"
$inflector->ordinalize(-1021); // "-1021st"
# uncountable
$inflector->is_uncountable("advice"); // true
$inflector->is_uncountable("weather"); // true
$inflector->is_uncountable("cat"); // falseHelpers makes it easy to use default locale inflections.
<?php
namespace ICanBoogie;
echo pluralize('child'); // "children"
echo pluralize('genou', 'fr'); // "genoux"
echo singularize('lærere', 'nb'); // "lærer"
echo pluralize('üçgen', 'tr'); // "üçgenler"Most of the code and documentation was adapted from Ruby On Rails's Inflector and David Celis' inflections.
Significant differences:
- Better support of accentuated characters.
- The Ruby module separator
::as been replaced by the PHP namespace separator\. - The plural of "octopus" is "octopuses" (not "octopi"), the plural of "virus" is "viruses" (not viri) and the pural of "cow" is "cows" (not "kine").
- The following methods have been removed:
tableize,classify,demodulize,constantize,deconstantizeandforeign_key. They can be easily implemented in specific inflectors. - Added the
hyphenatemethod, which is a combination ofunderscoreanddasherize. - One specifies
truerather thanfalsetocamelize()to downcase the first letter of the camel cased string.
Inflector expects to work in UTF-8, which is the default encoding character set starting
PHP 5.6, for older versions please use mb_internal_encoding() as follows:
<?php
namespace ICanBoogie;
// …
mb_internal_encoding('UTF-8');
titleize("été_aux_âmes_inouïes"); // Été Aux Âmes InouïesThe package requires PHP 5.3.4 or later.
The recommended way to install this package is through Composer:
$ composer require icanboogie/inflector
The package is available on GitHub, its repository can be cloned with the following command line:
$ git clone https://github.com/ICanBoogie/Inflector.git
The package is documented as part of the ICanBoogie framework
documentation. The documentation for the package is generated with the make doc command.
The documentation is generated in the build/docs directory using ApiGen.
The package directory can later by cleaned with the make clean command.
The test suite is ran with the make test command. Composer is
automatically installed as well as all the dependencies required to run the suite. The package
directory can later be cleaned with the make clean command.
The package is continuously tested by Travis CI.
icanboogie/inflector is licensed under the New BSD License - See the LICENSE file for details.