typicms / translatable
A trait to make an Eloquent model hold translations
Fund package maintenance!
typicms
Installs: 15
Dependents: 2
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/typicms/translatable
Requires
- php: ^8.0
- illuminate/database: ^9.0|^10.0|^11.0|^12.0
- illuminate/support: ^9.0|^10.0|^11.0|^12.0
- spatie/laravel-package-tools: ^1.11
Requires (Dev)
- mockery/mockery: ^1.4
- orchestra/testbench: ^7.0|^8.0|^9.0|^10.0
- pestphp/pest: ^4.1.3
This package is auto-updated.
Last update: 2025-11-02 21:54:54 UTC
README
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.