shanginn / yalt
为 Eloquent 模型提供另一种 Laravel 翻译器 (Yalt)
dev-master
2019-10-03 08:22 UTC
Requires
- php: >=7.0.0
- illuminate/support: ^6.1
This package is auto-updated.
Last update: 2024-09-14 23:05:49 UTC
README
警告:此包正在积极开发中,请小心使用
需求
- PHP 7.*
- Laravel 5.* (仅测试了 5.4)
安装
包
composer require shanginn/yalt
将服务提供者添加到 config/app.php
'providers' => [ //... Shanginn\Yalt\YaltServiceProvider::class, ]
迁移
默认情况下,可翻译表的后缀设置为 ll
,因此例如,对于 things
表的翻译表应命名为 things_lls
。
您可以在配置文件中更改此后缀(translation_suffix)。
php artisan make:migration create_things_localizations_table
假设您需要为 Thing
模型添加可翻译的标题和描述。打开您的迁移文件并修改 up
方法,如下所示
// database/migrations/2017_02_20_200652_create_things_localizations_table.php public function up() { Schema::create('things_lls', function (Blueprint $table) { $table->increments('id'); $table->char('locale', 2)->index(); $table->integer('thing_id')->index(); $table->string('title'); $table->string('description'); $table->unique(['thing_id', 'locale']); $table->foreign('thing_id', 'thing_idx') ->references('id')->on('things') ->onDelete('cascade') ->onUpdate('cascade'); }); }
模型
要使 Thing
模型可翻译,您只需导入 Translatable
特性,使用它并定义可翻译字段。
// App/Thing.php //... use Shanginn\Yalt\Eloquent\Concerns\Translatable; class Thing extends Model { use Translatable; protected $translatable = ['title', 'description']; //...
这就完成了!无需模型、无需关系。纯粹的魅力。
中间件
如果您想根据 'Accept-Language' 头信息更改当前应用程序的区域设置,请将 locale
中间件注册到 Http/Kernel.php
。
// Http/Kernel.php //... protected $routeMiddleware = [ //... 'locale' => \Shanginn\Yalt\Http\Middleware\Localization::class, //... ]
并将其应用于一些路由。
用法
Thing::create([ 'title' => [ // Explicit locale definition for title 'en' => 'Title in english', 'ru' => 'Русский заголовок' ], // Use default locale for description 'description' => 'Description in the default locale' ])
抱歉。目前就这么多。更多信息即将到来...查看源代码。
TODO
- 在这里写基本信息
- 在这里写更多信息
- 创建测试
- 测试所有提供的功能
- 添加 artisan 命令以创建可翻译模型的迁移
- 在 _lls 表中将
id
主键替换为 [item_id
,locale
] 组合主键 - 添加选择 复数 和 单数 表后缀(例如,things_lls 与 thing_lls)的能力
附加信息
基于 dimsav/laravel-translatable。但我觉得为每个可翻译的项目创建相同的模型太麻烦了,所以几乎完全重写了这个包。
请随意以任何方式做出贡献!