icanboogie/inflector

多语言词形变换器,将单词从单数变为复数,下划线变为驼峰式,等等。

v2.2.1 2023-03-12 18:39 UTC

README

Release Code Quality Code Coverage Packagist

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 RailsInflectorDavid Celisinflections 中改编而来的。

显著差异

  • 更好的支持重音字符。
  • 将 Ruby 模块分隔符 :: 替换为 PHP 命名空间分隔符 \
  • "章鱼" 的复数是 "octopuses"(不是 "octopi"),"病毒" 的复数是 "viruses"(不是 viri),"牛" 的复数是 "cows"(不是 "kine")。
  • 以下方法已被删除: tableizeclassifydemodulizeconstantizedeconstantizeforeign_key。它们可以很容易地在不特定的词形变换器中实现。
  • 添加了 hyphenate 方法,它是 underscoredasherize 的组合。
  • 对于 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 持续进行测试。

Tests Static Analysis Code Style

行为准则

该项目遵守 贡献者行为准则。通过参与该项目及其社区,您应遵守此准则。

贡献

有关详细信息,请参阅 CONTRIBUTING

许可证

icanboogie/inflector 根据 BSD-3-Clause 许可发布。