Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
89 lines (69 sloc) 2.38 KB

Installation

Install package

Add the package in your composer.json by executing the command.

composer require astrotomic/laravel-translatable

Configuration

We copy the configuration file to our project.

php artisan vendor:publish --tag=translatable 

{% hint style="info" %} There isn't any restriction for the format of the locales. Feel free to use whatever suits you better, like "eng" instead of "en", or "el" instead of "gr". The important is to define your locales and stick to them. {% endhint %}

Migrations

In this example, we want to translate the model Post. We will need an extra table post_translations:

{% code-tabs %} {% code-tabs-item title="create_posts_table.php" %}

Schema::create('posts', function(Blueprint $table) {
    $table->increments('id');
    $table->string('author');
    $table->timestamps();
});

{% endcode-tabs-item %} {% endcode-tabs %}

{% code-tabs %} {% code-tabs-item title="create_post_translations_table" %}

Schema::create('post_translations', function(Blueprint $table) {
    $table->increments('id');
    $table->integer('post_id')->unsigned();
    $table->string('locale')->index();
    $table->string('title');
    $table->text('content');

    $table->unique(['post_id', 'locale']);
    $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
});

{% endcode-tabs-item %} {% endcode-tabs %}

Models

The translatable model Post should use the trait Astrotomic\Translatable\Translatable. The default convention for the translation model is PostTranslation. The array $translatedAttributes contains the names of the fields being translated in the PostTranslation model.

{% code-tabs %} {% code-tabs-item title="Post.php" %}

use Astrotomic\Translatable\Contracts\Translatable as TranslatableContract;
use Astrotomic\Translatable\Translatable;

class Post extends Model implements TranslatableContract
{
    use Translatable;
    
    public $translatedAttributes = ['title', 'content'];
    protected $fillable = ['author'];
}

{% endcode-tabs-item %} {% endcode-tabs %}

{% code-tabs %} {% code-tabs-item title="PostTranslation.php" %}

class PostTranslation extends Model
{
    public $timestamps = false;
    protected $fillable = ['title', 'content'];
}

{% endcode-tabs-item %} {% endcode-tabs %}

You can’t perform that action at this time.