novius/laravel-translatable
最新稳定版本:1.1.0
Composer 安装命令:
composer require novius/laravel-translatable
包简介
A Laravel Eloquent model trait for translatable resource
README 文档
README
Introduction
A package for making Laravel Eloquent models "translatable" using two fields: locale and locale_parent_id.
Requirements
- Laravel >= 11.0
- PHP >= 8.2
Installation
You can install the package via composer:
composer require novius/laravel-translatable
You can publish lang files:
php artisan vendor:publish --provider="Novius\Translatable\LaravelTranslatableServiceProvider" --tag=lang
Usage
Migrations
Schema::create('posts', function (Blueprint $table) { $table->id(); $table->translatable(); // Macro provided by the package $table->string('title'); $table->text('text'); $table->timestamps(); });
Eloquent Model Trait
namespace App\Models; use \Illuminate\Database\Eloquent\Model; use Novius\LaravelTranslatable\Traits\Translatable; class Post extends Model { use Translatable; ... }
This trait adds:
- A relation
translationscontaining all translations of the model - A relation
translationsWithDeletedcontaining all translations of the model, including those in trash if your model use SoftDelete trait - A function
translate(string $locale, array $translateAttributes = [])to translate a model in a new locale - A function
getTranslation(string $locale, bool $withDeleted = false)returning the translated model in specified locale or null if it doesn't exist. - A scope
withLocale($locale)on the query
$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');
You can override the translatableConfig method of the trait if you want to customize his behavior:
namespace App\Models; use \Illuminate\Database\Eloquent\Model; use Novius\LaravelTranslatable\Traits\Translatable; class Post extends Model { // ... public function translatableConfig(): TranslatableModelConfig { return new TranslatableModelConfig( ['fr', 'en'], // Restricted translations to specified locals 'locale', // The name of de `locale` column 'locale_parent_id' // The name of de `locale_parent_id` column ); } }
You can override the translateAttributes method of the trait if you want to translate some attributes of the model before saving:
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'; } ... }
Testing
composer run test
CS Fixer
Lint your code with Laravel Pint using:
composer run cs-fix
Licence
This package is under GNU Affero General Public License v3 or (at your option) any later version.
统计信息
- 总下载量: 8.14k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 1
- 依赖项目数: 2
- 推荐数: 0
其他信息
- 授权协议: AGPL-3.0-or-later
- 更新时间: 2023-07-17