whitecube/lingua

PHP 语言代码转换器,支持从和到最常见的格式(ISO、W3C、PHP 和可读性名称)。

资助包维护!
whitecube

1.1.1 2021-11-25 13:30 UTC

This package is auto-updated.

Last update: 2024-08-25 19:26:23 UTC


README

Travis Test Coverage GitHub release Packagist GitHub issues GitHub pull requests license

本包可以将语言转换为一些常见格式(ISO 代码、W3C 标准、PHP 本地化字符串),包括可读性字符串。

安装

composer require whitecube/lingua

内容

该包目前支持 220 多种语言。包括大多数活语言,带有国家代码、名称和可能的字母集(拉丁、西里尔、阿拉伯、...)。

可用的 输入和输出格式 包括

  1. name: 语言英文名称(大多数情况下)。
  2. native: 语言的自主名称。
  3. ISO-639-1: 语言的官方 两位字母代码有些语言没有这个代码
  4. ISO-639-2t: 术语应用(ISO 639-2/T)的官方三个字母代码。
  5. ISO-639-2b: 图书馆应用(ISO 639-2/B)的官方三个字母代码。
  6. ISO-639-3: 官方的三个字母代码。这也是最常见的术语,因此是语言表示最完整的形式。在大多数情况下,这与 ISO-639-2t 格式相同,但不是宏语言。
  7. W3C: 根据 BCP 47 规范描述的 有效字符串(用于 W3C 的语言属性建议)。
  8. 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 方法来更改此默认行为。可用的格式有:namenativeiso-639-1iso-639-2tiso-639-2biso-639-3w3cphp

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 测试失败,所以在提交更改之前,请确保运行测试并相应地更新它们。

谢谢!

💖 赞助

如果您在生产应用程序中依赖于此软件包,请考虑赞助我们!这是帮助我们继续做我们热爱的事情——制作优秀的开源软件的最佳方式。