vpremiss / arabicable
用于Laravel应用程序处理阿拉伯文本的高级技术。
Requires
- php: ^8.2
- caneara/quest: ^4.0
- illuminate/contracts: ^11.0
- spatie/laravel-package-tools: ^1.16
- vpremiss/crafty: ^4.14.0
Requires (Dev)
- larastan/larastan: ^2.9
- nunomaduro/collision: ^8.1.1
- orchestra/testbench: ^9.0.0
- pestphp/pest: ^2.34
- pestphp/pest-plugin-arch: ^2.7
- pestphp/pest-plugin-laravel: ^2.3
- phpstan/extension-installer: ^1.3
- phpstan/phpstan-deprecation-rules: ^1.1
- phpstan/phpstan-phpunit: ^1.3
- dev-main
- v3.5.0
- v3.4.0
- v3.3.3
- v3.3.2
- v3.3.1
- v3.2.0
- v3.1.1
- v3.1.0
- v3.0.5
- v3.0.4
- v3.0.3
- v3.0.2
- v3.0.1
- v3.0.0
- v2.1.4
- v2.1.3
- v2.1.2
- v2.1.1
- v2.1.0
- v2.0.1
- v2.0.0
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- dev-dependabot/composer/orchestra/testbench-9.3.0
- dev-dependabot/composer/nunomaduro/collision-8.4.0
- dev-dependabot/composer/pestphp/pest-2.35.0
- dev-dependabot/composer/larastan/larastan-2.9.8
- dev-dependabot/github_actions/codecov/codecov-action-4.5.0
- dev-dependabot/composer/phpstan/extension-installer-1.4.1
- dev-dev
This package is auto-updated.
Last update: 2024-10-02 17:45:25 UTC
README
بسم الله الرحمن الرحيمArabicable
管理阿拉伯文本的几种有效策略。
描述
这里的主要方法是依赖数据库来存储每个阿拉伯或印度数字列的变体。拥有它们专属的列使得索引和搜索效率更高;结合根据字符容量对所有可用迁移类型的适当选择。同时利用Laravel的Eloquent 观察者,在更新时再次只处理必要的部分。
因此,根据模型属性长度的要求,我们添加了阿拉伯的 宏,用于 string、tinyText、text、mediumText 和 longText;还有一个用于印度数字的 date。使用这些 string 或 text 类型的,将为每个阿拉伯列生成2个额外的列(一个可配置的 后缀),即)。而印度的 date 列将生成一个 column_indian 列来存储它;其中 column 是一个示例属性名称。
最后,请查看以下提供的列表(API 部分),以了解我们对文本进行的处理,以基本上保留 column(无哈拉克特)、column_with_harakat 和 column_searchable,每个都正好为此而准备...
安装
-
通过 composer 安装包
composer require vpremiss/arabicable
-
使用此命令运行包的 Artisan 安装程序
php artisan arabicable:install
[!NOTE]配置文件以及迁移表将自动发布。
升级
-
备份您的当前 配置,以及常见的阿拉伯文本迁移和种子文件。
-
使用以下 Artisan 命令重新发布包的内容
php artisan vendor:publish --tag="arabicable-config" --force php artisan vendor:publish --tag="arabicable-migrations" --force php artisan vendor:publish --tag="arabicable-seeders" --force
-
在您的端再次优雅地迁移和种子;请记住,种子文件会定期更改。
用法
Arabicable
好吧,让我们假设我们有一个 Note(s)并且我们想要使它们的 content 变为阿拉伯语!
-
首先,创建 迁移 并向其中添加一个可阿拉伯化的
columnuse Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; // ... Schema::create('notes', function (Blueprint $table) { $table->id(); $table->arabicText('content'); // this also creates `content_searchable` and `content_with_harakat` of the same type $table->timestamps(); });
-
然后让我们使模型 "arabicable",这将激活观察者
use Illuminate\Database\Eloquent\Model; use VPremiss\Arabicable\Traits\Arabicable; class Note extends Model { use Arabicable; protected $fillable = ['content']; // or you'd guard the property differently }
-
最后,当我们创建一个新的笔记并传递一些阿拉伯内容(可能带有哈拉克特)时,它将自动处理其其他列
// When spacing_after_punctuation_only is set to `false` in configuration (default) $note = Note::create([ 'content' => '"الجَمَاعَةُ مَا وَافَقَ الحَقّ، أَنْتَ الجَمَاعَةُ وَلَو كُنْتَ وَحْدَكْ."', ]); echo $note->content; // "الجماعة ما وافق الحق ، أنت الجماعة ولو كنت وحدك ." echo $note->{ar_with_harakat('content')}; // "الجَمَاعَةُ مَا وَافَقَ الحَقّ ، أَنْتَ الجَمَاعَةُ وَلَو كُنْتَ وَحْدَكْ ." echo $note->{ar_searchable('content')}; // "الجماعة ما وافق الحق انت الجماعة ولو كنت وحدك" // When spacing_after_punctuation_only is set to `true` in configuration $seriousContentPoliticiansDoNotLike = <<<Arabic - قال المُزني: سألتُ الشافعي عن مسألة في "الكلام"، فقال: سَلني عن شيء إذا أخطأتَ فيه قُلتُ "أخطأتَ!"، ولا تسألني عن شيء إذا أخطأتَ فيه قُلتُ "كفرتَ". Arabic; $note->update(['content' => $seriousContentPoliticiansDoNotLike]); echo $note->content; // - قال المزني: سألت الشافعي عن مسألة في "الكلام"، فقال: سلني عن شيء إذا أخطأت فيه قلت "أخطأت!"، ولا تسألني عن شيء إذا أخطأت فيه قلت "كفرت". echo $note->{ar_with_harakat('content')}; // - قال المُزني: سألتُ الشافعي عن مسألة في "الكلام"، فقال: سَلني عن شيء إذا أخطأتَ فيه قُلتُ "أخطأتَ!"، ولا تسألني عن شيء إذا أخطأتَ فيه قُلتُ "كفرتَ". echo $note->{ar_searchable('content')}; // قال المزني سالت الشافعي عن مسالة في الكلام فقال سلني عن شيء اذا اخطات فيه قلت اخطات ولا تسالني عن شيء اذا اخطات فيه قلت كفرت
[!NOTE]
请注意,我们可以使用全局辅助函数(ar_with_harakat、ar_searchable和ar_indian)来快速获取相应的属性名称。
[!IMPORTANT]
在文本处理过程中使用验证方法来确保文本无标点符号异常,这些异常可能影响空格调整。
常见阿拉伯文本
您必须确保迁移、模型、工厂和种子都已设置,以便使用此功能。
在《Arabic》接口提供的众多其他过滤方法中,有一个名为《removeCommons》的方法。使用它来过滤掉可以帮助您找到更聚焦上下文的内容。
您可以将此与整个过滤后的ArabicFilter::forSearch搜索结合起来,以确保您首先没有错过引用本身,等等...
API
-
以下是所有可用的自定义迁移蓝图宏列的表格
-
请记住以下事项
- 每个都可以传递一个
$isNullable布尔参数,这将影响所有列。 - 每个都可以传递一个
$isUnique布尔参数,这将影响原始列。 arabicString可以传递一个$length整数参数。- 《arabicString》和《arabicTinyText》都可以传递一个
$supportsFullSearch参数,影响它们的'searchable'列。 - 最后,《arabicText》、《arabicMediumText》和《arabicLongText》都已经在它们的
'searchable'列上设置了全文搜索索引。
- 每个都可以传递一个
-
-
以下是所有《Arabicable》包辅助函数的表格
包开发
- 在[《TestCase》]文件中将《localTimezone》更改为您自己的。
变更日志
您可以通过WTD在线查看该包的变更日志。
进展
支持
通过赞助或一次性捐赠(如果您喜欢),支持包的持续维护以及其他项目的开发。
愿安拉接受您的努力;阿米恩。
许可
本软件包是开源软件,许可协议为MIT许可证。
鸣谢
灵感
- LinuxScout
emohamed@umail.iu.edu提供了原始复数列表- Quest 包
- AR-PHP 包
- AR-PHP-Laravel 包
万物非主,唯有真主,穆罕默德是安拉的使者