elforastero/transliterate

为laravel的转写包

8.0.0 2024-08-01 16:58 UTC

This package is auto-updated.

Last update: 2024-09-17 04:53:29 UTC


README

GitHub GitHub release Packagist

一个小型转写包,可以将西里尔字母转换为拉丁字母,并允许创建自定义的转写映射。

Code example

预置映射

  • 俄语
    • 默认
    • GB 7.79-2000
  • 乌克兰语
    • 国家

系统要求

  • laravel >= 5.6
  • ext-intl

安装

> composer require elforastero/transliterate

⚠️ 对于Laravel v5,请使用v2分支: composer require elforastero/transliterate "^2.0"

Laravel从版本5.5开始不需要额外的配置,因为有了包发现机制。

如果您不使用包发现,则需要注册Service Provider,将其添加到app.php配置文件的providers数组中。

ElForastero\Transliterate\ServiceProvider::class,

如果您想使用别名,请将其添加到app.php中的facades数组。

建议使用Transliterate作为别名,以避免与Intl扩展中的Transliterator类冲突。

'Transliterate' => ElForastero\Transliterate\Facade::class,

配置

要将配置transliterate.php复制到configs目录,请执行

> php artisan vendor:publish --provider="ElForastero\Transliterate\ServiceProvider"

使用

您可以使用门面进行字符串转写。

use Transliterate;

Transliterate::make('Двадцать тысяч льё под водой');
// "Dvadcat tisyach lyo pod vodoy"

可以将替代的转写映射作为第二个参数传递。

use ElForastero\Transliterate\Transliterator;

$transliterator = new Transliterator(Map::LANG_RU, Map::GOST_7_79_2000);
$transliterator->make('Двадцать тысяч льё под водой');
// "Dvadcat` ty'syach l`yo pod vodoj"

生成URL

slugify方法生成URL,删除字符串中的所有标点符号,并将空格替换为"-"。

Transliterate::slugify('Съешь еще этих мягких французских булок, да выпей чаю!');
// sesh-eshhe-etih-myagkih-francuzskih-bulok-da-vipey-chayu

创建转写映射

每个映射都是一个关联数组,其中的键是要替换的符号,值是它们将被替换成的值。

映射以返回数组的形式创建为单独的文件

// /resources/maps/ua/ukraine.php

return [
    'ї' => 'i',
    'і' => 'i',
    'є' => 'ie',
];

将创建的映射的路径添加到transliterate.php配置的maps数组中

'ua' => [
    'ukraine' => dirname(__DIR__) . '/resources/maps/ua/ukraine.php',
]

之后就可以使用该映射了。

$transliterator = new Transliterator('ua', 'ukraine');
$transliterator->make('Ваша транслітерація');

创建转换器

转换器是将在转写结果上自动应用的功能。如果您需要每次都对转写字符串执行相同的操作,这很有用。转换器在transformers数组中注册。

例如,可以自动删除末尾的空格。

ElForastero\Transliterate\Transformer::register(\Closure::fromCallable('trim')),

或者可以将字符串转换为小写。

ElForastero\Transliterate\Transformer::register(\Closure::fromCallable('trim')),
ElForastero\Transliterate\Transformer::register(\Closure::fromCallable('strtolower')),

请注意,转换器在每次调用Transliterator::make时都会应用。

开发

要运行PHPUnit测试,可以使用根目录下的Dockerfile

docker-compose up --build

...
php_1  | Runtime:       PHP 8.0.22
php_1  | Configuration: /srv/app/phpunit.xml
php_1  |
php_1  | .....                                                               5 / 5 (100%)
php_1  |
php_1  | Time: 00:00.959, Memory: 14.00 MB
php_1  |
php_1  | OK (5 tests, 6 assertions)