icanboogie / inflector
多语言词形变换器,将单词从单数变为复数,下划线变为驼峰式,等等。
Requires
- php: >=7.1
- ext-mbstring: *
Requires (Dev)
- icanboogie/common: ^2.0
- phpstan/phpstan: ^0.12.92
- phpunit/phpunit: ^7.5
Conflicts
- icanboogie/common: <2.0
README
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.
目前支持以下语言
- 英语 (
en
) - 法语 (
fr
) - 挪威语(博克马尔方言)(
nb
) - 葡萄牙语 (
pt
) - 西班牙语 (
es
) - 土耳其语 (
tr
)
安装
composer require icanboogie/inflector
用法
以下是一些使用默认区域设置(en
)的词形变换器示例。
<?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"); // false
辅助器使得使用默认区域设置词形变换变得简单。
<?php namespace ICanBoogie; echo pluralize('child'); // "children" echo pluralize('genou', 'fr'); // "genoux" echo singularize('lærere', 'nb'); // "lærer" echo pluralize('üçgen', 'tr'); // "üçgenler"
关于词形变换
词形变换是本地化的,配置器保存在 lib/Inflections/en.php 中。自 v2.1 版本起,这些配置器是自动加载的类,这意味着,在理论 上,您可以指定另一个 ICanBoogie\\Inflections\\
以在您的 composer.json
文件中添加自己的或覆盖已定义的。
致谢
大多数代码和文档都是从 Ruby On Rails 的 Inflector 和 David Celis 的 inflections 中改编而来的。
显著差异
- 更好的支持重音字符。
- 将 Ruby 模块分隔符
::
替换为 PHP 命名空间分隔符\
。 - "章鱼" 的复数是 "octopuses"(不是 "octopi"),"病毒" 的复数是 "viruses"(不是 viri),"牛" 的复数是 "cows"(不是 "kine")。
- 以下方法已被删除:
tableize
、classify
、demodulize
、constantize
、deconstantize
和foreign_key
。它们可以很容易地在不特定的词形变换器中实现。 - 添加了
hyphenate
方法,它是underscore
和dasherize
的组合。 - 对于
camelize()
,指定true
而不是false
以将驼峰字符串的第一个字母小写。
入门
词形变换器 期望在 UTF-8 下工作,这是 PHP 5.6 开始的默认编码字符集,对于旧版本请使用 mb_internal_encoding()
如下所示
<?php namespace ICanBoogie; // … mb_internal_encoding('UTF-8'); titleize("été_aux_âmes_inouïes"); // Été Aux Âmes Inouïes
持续集成
该项目通过 GitHub actions 持续进行测试。
行为准则
该项目遵守 贡献者行为准则。通过参与该项目及其社区,您应遵守此准则。
贡献
有关详细信息,请参阅 CONTRIBUTING。
许可证
icanboogie/inflector 根据 BSD-3-Clause 许可发布。