typicms/translatable

A trait to make an Eloquent model hold translations

Maintainers

👁 Samuel De Backer

Package info

github.com/typicms/translatable

pkg:composer/typicms/translatable

Fund package maintenance!

typicms

Statistics

Installs: 2 749

Dependents: 4

Suggesters: 0

Stars: 1

Open Issues: 2

2.0.1 2026-03-13 14:17 UTC

Requires

Requires (Dev)

Suggests

None

Provides

None

Conflicts

None

Replaces

None

MIT 692e8f5bfa0189c32cd1bdd63da293bfd527936e

translatablemodellaraveltranslateeloquentmultilinguali10nTypiCMS


README

👁 Latest Version on Packagist
👁 MIT Licensed
👁 run-tests
👁 PHPStan
👁 Rector

This project is based on spatie/laravel-translatable, it resolves inconsistencies that have arisen over time in the initial project.

This package contains a trait HasTranslations to make Eloquent models translatable. Translations are stored as json. There is no extra table needed to hold them.

use Illuminate\Database\Eloquent\Model;
use TypiCMS\Translatable\HasTranslations;

class NewsItem extends Model
{
 use HasTranslations;
 
 // ...
}

After the trait is applied on the model, you can do these things:

$newsItem = new NewsItem;
$newsItem
 ->setTranslation('name', 'en', 'Name in English')
 ->setTranslation('name', 'nl', 'Naam in het Nederlands')
 ->save();

$newsItem->name; // Returns 'Name in English' given that the current app locale is 'en'
$newsItem->getTranslation('name', 'nl'); // returns 'Naam in het Nederlands'

app()->setLocale('nl');

$newsItem->name; // Returns 'Naam in het Nederlands'

// If you want to query records based on locales, you can use the `whereLocale` and `whereLocales` methods.

NewsItem::whereLocale('name', 'en')->get(); // Returns all news items with a name in English

NewsItem::whereLocales('name', ['en', 'nl'])->get(); // Returns all news items with a name in English or Dutch

Testing

composer test

Security

If you've found a bug regarding security, please mail sdebacker@gmail.com instead of using the issue tracker.

Credits

We got the idea to store translations as JSON in a column from Mohamed Said. Parts of the readme of his multilingual package were used in this readme.

License

The MIT License (MIT). Please see License File for more information.