whitecube / lingua
PHP 语言代码转换器,支持从和到最常见的格式(ISO、W3C、PHP 和可读性名称)。
Requires
- php: ^7.0|^8.0
- ext-mbstring: *
Requires (Dev)
- phpunit/phpunit: ^9.3
README
本包可以将语言转换为一些常见格式(ISO 代码、W3C 标准、PHP 本地化字符串),包括可读性字符串。
安装
composer require whitecube/lingua
内容
该包目前支持 220 多种语言。包括大多数活语言,带有国家代码、名称和可能的字母集(拉丁、西里尔、阿拉伯、...)。
可用的 输入和输出格式 包括
name
: 语言英文名称(大多数情况下)。native
: 语言的自主名称。ISO-639-1
: 语言的官方 两位字母代码。 有些语言没有这个代码。ISO-639-2t
: 术语应用(ISO 639-2/T)的官方三个字母代码。ISO-639-2b
: 图书馆应用(ISO 639-2/B)的官方三个字母代码。ISO-639-3
: 官方的三个字母代码。这也是最常见的术语,因此是语言表示最完整的形式。在大多数情况下,这与ISO-639-2t
格式相同,但不是宏语言。W3C
: 根据 BCP 47 规范描述的 有效字符串(用于 W3C 的语言属性建议)。PHP
: 用于 PHP 的setlocale()
的适当格式的字符串。这不会检查服务器上是否可用的区域设置。
关于宏语言的说明:ISO-639-3
输出还将指示使用相同 ISO 代码表示的子语言数量。
用法
Lingua 转换器分为两个阶段:首先需要通过提供原始格式来实例化它,然后可以将其字符串转换为任何可用的格式。
注意:可以使用已弃用的 ISO 代码实例化某些语言。例如,可以使用 ISO 639_1 代码 "iw" 而不是 "he" 来实例化希伯来语。
设置器
use WhiteCube\Lingua\Service as Lingua; // Create a converter, without knowing the original format (this will try to guess it for you) $language = Lingua::create('en_GB'); // Create a converter from a language name $language = Lingua::createFromName('french'); $language = (new Lingua())->fromName('german'); // Create a converter from a language's native name $language = Lingua::createFromNative('nederlands'); $language = (new Lingua())->fromNative('magyar'); // Create a converter from a ISO 639-1 code $language = Lingua::createFromISO_639_1('mk'); $language = (new Lingua())->fromISO_639_1('ko'); // Create a converter from a ISO 639-2t code $language = Lingua::createFromISO_639_2t('heb'); $language = (new Lingua())->fromISO_639_2t('gle'); // Create a converter from a ISO 639-2b code $language = Lingua::createFromISO_639_2b('her'); $language = (new Lingua())->fromISO_639_2b('iku'); // Create a converter from a ISO 639-3 code $language = Lingua::createFromISO_639_3('aze + 2'); $language = (new Lingua())->fromISO_639_3('asm'); // Create a converter from a valid W3C language string $language = Lingua::createFromW3C('ae'); $language = (new Lingua())->fromW3C('zh-hans-SG'); // Create a converter from a valid PHP localization string $language = Lingua::createFromPHP('fr_BE'); $language = (new Lingua())->fromPHP('kk_Cyrl_KZ');
格式化
use WhiteCube\Lingua\Service as Lingua; $language = Lingua::createFromNative('français'); // Format a language in a human readable string (the language's english name) echo $language->toName(); // "french" // Format a language in its native form echo $language->toNative(); // "français" // Format a language in a ISO 639-1 string echo $language->toISO_639_1(); // "fr" // Format a language in a ISO 639-2t string echo $language->toISO_639_2t(); // "fra" // Format a language in a ISO 639-2b string echo $language->toISO_639_2b(); // "fre" // Format a language in a ISO 639-3 string echo $language->toISO_639_3(); // "fra" // Format a language in a valid W3C language attribute string (according to BCP 47) echo $language->toW3C(); // "fr" in this case but could be "fr-BE" if country code was specified // Format a localization string for PHP's setlocale() echo $language->toPHP(); // "fr" in this case but could be "fr_BE" if country code was specified
默认格式
Lingua 实例可以在不调用任何格式化方法的情况下自动转换为字符串。
默认格式 设置为 w3c
,这意味着可以使用 Lingua 实例作为字符串,并且将自动调用 toW3C()
方法。
use WhiteCube\Lingua\Service as Lingua; echo Lingua::createFromName('italian'); // "it"
可以通过调用静态 setFormat
方法来更改此默认行为。可用的格式有:name
、native
、iso-639-1
、iso-639-2t
、iso-639-2b
、iso-639-3
、w3c
和 php
。
use WhiteCube\Lingua\Service as Lingua; Lingua::setFormat('native'); $language = Lingua::createFromISO_639_3('ita'); echo $language; // "italiano" Lingua::setFormat('iso-639-1'); echo $language; // "it"
此外,在实例化 Lingua 时也可以指定所需的格式。这 将始终忽略默认格式化,即使您已调用静态 setFormat
方法。
use WhiteCube\Lingua\Service as Lingua; $language = new Lingua('native'); $language->fromISO_639_1('ks'); echo $language; // "कश्मीरी, كشميري" // Trying to change the default formatting Lingua::setFormat('name'); echo $language; // still "कश्मीरी, كشميري" echo $language->toName(); // "kashmiri"
此行为也可以使用静态 create
方法。可以将所需的格式化作为第二个参数指定。
use WhiteCube\Lingua\Service as Lingua; echo Lingua::createFromName('maltese', 'native'); // "malti"
注册自定义语言
有时您可能需要向内置语言仓库中添加新的语言,以便以后识别。当然,如果这些语言应该添加到软件包中,您应该考虑为此仓库做出贡献。在此期间,您也可以通过 LanguagesRepository::register()
方法从您的代码中添加它们。
use WhiteCube\Lingua\Service as Lingua; use WhiteCube\Lingua\LanguagesRepository; // Note: all keys of the register-array showed below are optionnal. LanguagesRepository::register([ 'name' => 'custom', 'native' => 'custom-language', 'iso-639-1' => 'cl', 'iso-639-2t' => 'cla', 'iso-639-2b' => 'cla', 'iso-639-3' => 'cla + 2', 'countries' => ['MY' => 'My Country'], 'scripts' => ['latn' => 'latin', 'cyrl' => 'cyrillic'] ]); echo Lingua::createFromName('custom')->toNative(); // "custom-language"
这不会修改 ./languages.php
文件!已注册的语言仅存储在内存中。
贡献
您的帮助对于使此软件包更加准确至关重要!您可以在两个层面进行贡献。
核心功能开发
为了添加新功能,只有经过良好记录和测试的拉取请求才会被接受。
请在此存储库上打开或评论现有问题,以报告错误。如果您确定自己的操作,可以发送拉取请求。
维护语言仓库
目前,在 ./languages.php
文件中,有一些语言被标记了 // TODO
注释。这意味着我们可能没有找到足够关于这些语言的信息。您知道如何填补这些空白吗?请告诉我们!您可以通过打开问题、发起拉取请求或在任何可用的平台上联系我们。
当然,您还可以向仓库添加新的语言,但前提是您必须确信术语的正确性。
请注意,更改 languages.php
文件中的一些现有值可能会导致一些 PHPUnit 测试失败,所以在提交更改之前,请确保运行测试并相应地更新它们。
谢谢!
💖 赞助
如果您在生产应用程序中依赖于此软件包,请考虑赞助我们!这是帮助我们继续做我们热爱的事情——制作优秀的开源软件的最佳方式。