mguinea / laravel-translatable
Laravel package to make Eloquent models attributes translatables
Installs: 53
Dependents: 1
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Type:laravel-package
Requires
- php: ^8.0
- illuminate/database: ^11.0
- illuminate/support: ^11.0
Requires (Dev)
- orchestra/testbench: ^9.0
- phpunit/phpunit: ^10.5
This package is auto-updated.
Last update: 2024-12-30 10:22:29 UTC
README
Make Eloquent model attributes translatables using Translations table
This package contains a trait to make Eloquent attributes translatable. Translations are stored in Translations database table.
Once the trait is installed on the model you can do these things:
$customer = new Customer; // An Eloquent model $customer ->setTranslation('greeting', 'en', 'Hello') ->setTranslation('greeting', 'es', 'Hola') ->save(); $customer->greeting; // Returns 'Hello' given that the current app locale is 'en' $customer->getTranslation('greeting', 'es'); // returns 'Hola' app()->setLocale('es'); $customer->greeting; // Returns 'Hola'
Installation
You can install the package via composer:
composer require mguinea/laravel-translatable
If you want to change the default model or the default tables names, you could publish the config file:
php artisan vendor:publish --tag=translatable-config
You must publish the migration file to create polymorphic and main translations tables:
php artisan vendor:publish --tag=translatable-migrations
Making a model translatable
The required steps to make a model translatable are:
-
First, you need to add the
Mguinea\Translatable\Traits\Translatable
-trait. -
Next, you should create a public static property
$translatable
which holds an array with all the names of attributes you wish to make translatable. -
You have to create a field in the migration of your model type
string
andnullable
.
Here's an example of a prepared model:
use Illuminate\Database\Eloquent\Model; use Mguinea\Translatable\Traits\Translatable; class NewsItem extends Model { use Translatable; protected $fillable = ['greeting']; public static $translatable = ['greeting']; }