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'
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
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'];
}