sanskritick / indicscript
印度文字脚本的转写包
Requires
- php: ^7.4|^8.0|^8.1
- ext-json: *
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.4
- orchestra/testbench: ^6.23
- phpunit/phpunit: ^9.5
README
介绍
IndicScript 是一个用 PHP 编写的印度语言的转写库。它支持最流行的印度文字和几种不同的罗马化方案。虽然 IndicScript 专注于梵文转写,但它对其他印度文字有部分支持,并且易于扩展。
要求
IndicScript 需要 PHP 7.4
用法
IndicScript 使用简单。
首先安装 Composer 包管理器,然后使用以下命令安装 IndicScript:
composer require sanskritick/indicscript
然后这样调用 IndicScript
<?php use Sanskritick\Script\IndicScript; $indicscript = new IndicScript(); $output = $indicscript->transliterate($input, $from, $to);
在 Laravel 5.5 中,包的提供者和外观将自动注册。在 Laravel 的旧版本中,您必须手动注册它们
// config/app.php 'providers' => [ ... Sanskritick\Script\IndicScriptServiceProvider::class, ], 'aliases' => [ ... 'IndicScript' => Sanskritick\Facades\IndicScript::class, ],
外观是可选的,但本指南的其余部分假定您正在使用它。
Laravel 用法
<?php use Sanskritick\Facades\IndicScript; $output = IndicScript::transliterate($input, $from, $to);
在这里,$from
和 $to
是不同 方案 的名称。在 IndicScript 中,"方案"一词既指文字也指罗马化。这些方案有两种类型
- 布拉米 方案,它们是 音节文字。所有印度文字都是布拉米方案。
- 罗马 方案,它们是 字母表。所有罗马化都是罗马方案。
支持的 所有 布拉米 和 罗马 方案的列表可在此处找到 方案
禁用转写
当 IndicScript 看到令牌 ##
时,它会切换转写状态
$indicscript->transliterate('ga##Na##pa##te', 'hk', 'devanagari'); // गNaपte $indicscript->transliterate('ध##र्म##क्षेत्रे', 'devanagari', 'hk'); // dhaर्मkSetre
当 IndicScript 看到令牌 \
时,它会禁用紧随其后的字符的转写。 \
用于 ITRANS 兼容性;我们建议始终使用 ##
。
$indicscript->transliterate('a \\a', 'itrans', 'devanagari'); // अ a $indicscript->transliterate('\\##aham', 'itrans', 'devanagari'); // ##अहम्
转写到有损方案
有损 方案没有支持无损失转换所需的字母。例如,孟加拉语是一个有损方案,因为它使用 ব
来表示 ba
和 va
。在未来版本中,IndicScript 可能会允许您选择如何处理有损性。目前,它做出了一些相当糟糕的硬编码假设。纠正和建议总是受欢迎的。
转写选项
您可以通过传递一个 options
数组来调整转写函数
$output = $indicscript->transliterate($input, $from, $to, $options);
$options
将选项映射到值。目前,这些选项受支持
skip_sgml
- 如果为 TRUE,将 SGML 标签转写为普通单词(<b>iti</b>
→<ब्>इति</ब्>
)。默认为FALSE
。syncope
- 如果为 TRUE,使用印度风格的转写(ajay
→अजय
)。在语言学中,这种行为被称为 schwa syncope。默认为FALSE
。
添加新方案
添加新方案很简单
$indicscript->addBrahmicScheme($schemeName, $schemeData); $indicscript->addRomanScheme($schemeName, $schemeData);
有关创建 $schemeData
的帮助,请参阅 addBrahmicScheme
和 addRomanScheme
函数的注释。