oblik/复数化

根据 Unicode 的复数化

1.4.0 2022-06-10 05:27 UTC

This package is auto-updated.

Last update: 2024-09-10 10:16:27 UTC


README

此包允许您根据 Unicode 中定义的语言复数规则获取单词的正确复数形式。您可以获取基数词和序数词的形式,以及基数词的范围形式。

要检查支持的语言,请查看 src 文件夹。如果您需要其他语言,请创建一个问题或拉取请求。

安装

使用 Composer

composer require oblik/pluralization

用法

六个复数类别,每个类别用一个常量表示:ZEROONETWOFEWMANYOTHER。您应在代码中使用这些常量

namespace Oblik\Pluralization {
    function place($n)
    {
        $class = LANGUAGES['en'];
        $form = $class::getOrdinal($n);

        switch ($form) {
            case ONE: return "{$n}st";
            case TWO: return "{$n}nd";
            case FEW: return "{$n}rd";
            case OTHER: return "{$n}th";
        }
    }

    echo place(1);    // 1st
    echo place(2);    // 2nd
    echo place(103);  // 103rd
    echo place(14);   // 14th
}

API

每种语言都由一个扩展抽象类 Language 的类表示,并具有以下静态方法

getCardinal($number)

返回基数词的复数形式。

getOrdinal($number)

返回序数词的复数形式。

getRange($start, $end)

返回范围的复数形式。

formName($form)

返回形式常量的字符串名称。

示例

use Oblik\Pluralization\EnglishLanguage;

EnglishLanguage::getCardinal(0);    // => Oblik\Pluralization\OTHER
EnglishLanguage::getCardinal(1);    // => Oblik\Pluralization\ONE
EnglishLanguage::getCardinal(1.5);  // => Oblik\Pluralization\OTHER
EnglishLanguage::getCardinal(2);    // => Oblik\Pluralization\OTHER

EnglishLanguage::getOrdinal(2);     // => Oblik\Pluralization\TWO
EnglishLanguage::getOrdinal(3);     // => Oblik\Pluralization\FEW
EnglishLanguage::getOrdinal(4);     // => Oblik\Pluralization\OTHER
EnglishLanguage::getOrdinal(103);   // => Oblik\Pluralization\FEW

EnglishLanguage::getRange(0, 2);    // => Oblik\Pluralization\OTHER
EnglishLanguage::getRange(1, 2);    // => Oblik\Pluralization\OTHER

EnglishLanguage::formName(Oblik\Pluralization\ZERO);    // => "zero"
EnglishLanguage::formName(Oblik\Pluralization\ONE);     // => "one"

要获取基于语言代码的正确语言类,请使用 LANGUAGES 常量

use const Oblik\Pluralization\LANGUAGES;

$lang = LANGUAGES['en'];  // => "Oblik\Pluralization\EnglishLanguage"
$lang::getCardinal(1);    // => Oblik\Pluralization\ONE