novius / laravel-translatable
一个用于可翻译资源的 Laravel Eloquent 模型特性
1.0.0
2024-07-10 12:33 UTC
Requires
- php: >=8.2
- illuminate/database: ^10.0|^11.0
- illuminate/support: ^10.0|^11.0
Requires (Dev)
- laravel/pint: ^1.16
- orchestra/testbench: ^9.1
- pestphp/pest: ^2.34
README
介绍
一个用于通过使用两个字段:locale 和 locale_parent_id 来使 Laravel Eloquent 模型 "可翻译" 的包。
要求
- Laravel >= 10.0
- PHP >= 8.2
注意:这些说明适用于 Laravel >= 10.0 和 PHP >= 8.2。如果您使用的是旧版本,请参阅 旧版本文档。
安装
您可以通过 composer 安装此包
composer require novius/laravel-translatable
php artisan vendor:publish --provider="Novius\Translatable\LaravelTranslatableServiceProvider" --tag=lang
用法
迁移
Schema::create('posts', function (Blueprint $table) { $table->id(); $table->translatable(); // Macro provided by the package $table->string('title'); $table->text('text'); $table->timestamps(); });
Eloquent 模型特性
namespace App\Models; use \Illuminate\Database\Eloquent\Model; use Novius\LaravelTranslatable\Traits\Translatable; class Post extends Model { use Translatable; ... }
此特性添加了以下功能:
- 一个包含模型所有翻译的
translations
关系 - 一个包含模型所有翻译的
translationsWithDeleted
关系,包括使用 SoftDelete 特性的模型中的垃圾箱中的翻译 - 一个
translate(string $locale, array $translateAttributes = [])
函数,用于在新地区翻译模型 - 一个
getTranslation(string $locale, bool $withDeleted = false)
函数,返回指定地区的翻译模型或不存在时返回 null。 - 查询上的
withLocale($locale)
范围
$post = new Post([ 'title' => 'Français', ]); $post->save() $post->translate('en', ['title' => 'English']); $post->translate('es', ['title' => 'Español']); // All translation including `fr` $allTranslations = $post->translations; $englishTranslation = $post->getTranslation('en'); // $italianTranslation is null $italianTranslation = $post->getTranslation('it');
如果您想在保存模型之前翻译一些模型属性,可以覆盖特性中的 translateAttributes
方法
namespace App\Models; use \Illuminate\Database\Eloquent\Model; use Novius\LaravelTranslatable\Traits\Translatable; class Post extends Model { use Translatable; protected function translateAttributes($parent): void { $this->some_attribut = $parent->some_attribut.' translated'; } ... }
测试
composer run test
CS Fixer
使用 Laravel Pint 检查代码的 lint
composer run cs-fix
许可证
此包受 GNU Affero General Public License v3 或(根据您的选择)任何较新版本的许可。