VictorD11/转写

laravel 的转写包

6.3.0 2024-02-08 19:42 UTC

This package is auto-updated.

Last update: 2024-09-08 21:20:50 UTC


README

GitHub GitHub release Packagist

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

Code example

预置映射表

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

系统要求

  • laravel >= 5.6

安装

> composer require victord11/transliterate

⚠️ 对于 Laravel v5,请使用 v3 分支: composer require victord11/transliterate "^3.0"

⚠️ 对于 Laravel v6,请使用 v4 分支: composer require victord11/transliterate "^4.0"

⚠️ 对于 Laravel v7,请使用 v5 分支: composer require victord11/transliterate "^5.0"

⚠️ 对于 Laravel v8,v9,v10,v11,请使用 v6 分支: composer require victord11/transliterate "^6.0"

Laravel 从版本 5.5 开始不需要额外配置,因为 Package Discovery 机制已经处理。

如果您未使用 Package Discovery,需要注册 Service Provider,将其添加到 app.php 配置文件中的 providers 数组。

VictoRD11\Transliterate\ServiceProvider::class,

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

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

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

配置

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

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

使用

您可以使用 facade 来进行字符串转写。

use Transliterate;

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

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

use VictoRD11\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/uk/ukraine.php

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

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

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

之后,就可以使用这个映射表了。

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

创建转换器

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

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

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

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

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

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