Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/spatie/laravel-translatable
Making Eloquent models translatable
https://github.com/spatie/laravel-translatable
eloquent i18n laravel php translated-attributes
Last synced: 5 days ago
JSON representation
Making Eloquent models translatable
- Host: GitHub
- URL: https://github.com/spatie/laravel-translatable
- Owner: spatie
- License: mit
- Created: 2016-04-07T11:49:51.000Z (over 8 years ago)
- Default Branch: main
- Last Pushed: 2024-04-29T02:19:53.000Z (6 months ago)
- Last Synced: 2024-05-01T11:46:02.902Z (6 months ago)
- Topics: eloquent, i18n, laravel, php, translated-attributes
- Language: PHP
- Homepage: https://spatie.be/docs/laravel-translatable
- Size: 271 KB
- Stars: 2,166
- Watchers: 27
- Forks: 271
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: LICENSE.md
- Support: docs/support-us.md
Awesome Lists containing this project
- awesome-laravel-framework - Laravel Translatable - Making Eloquent models translatable by storing translations as JSON. (Popular Packages)
- awesome-laravel - Laravel Translatable - Hacer que los modelos de Eloquent sean traducibles almacenando las traducciones como JSON (Paquetes utiles)
- laravel-awesome - Laravel Translatable - Making Eloquent models translatable by storing translations as JSON. (Popular Packages)
- awesome-laravel - Laravel Translatable - Making Eloquent models translatable by storing translations as JSON (Popular Packages)
README
# A trait to make Eloquent models translatable
[![Latest Version on Packagist](https://img.shields.io/packagist/v/spatie/laravel-translatable.svg?style=flat-square)](https://packagist.org/packages/spatie/laravel-translatable)
[![MIT Licensed](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](LICENSE.md)
![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/spatie/laravel-translatable/run-tests.yml)
[![Total Downloads](https://img.shields.io/packagist/dt/spatie/laravel-translatable.svg?style=flat-square)](https://packagist.org/packages/spatie/laravel-translatable)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.
```php
use Illuminate\Database\Eloquent\Model;
use Spatie\Translatable\HasTranslations;class NewsItem extends Model
{
use HasTranslations;
// ...
}
```After the trait is applied on the model you can do these things:
```php
$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
// Returns all news items that has name in English with value `Name in English`
NewsItem::query()->whereJsonContainsLocale('name', 'en', 'Name in English')->get();// Returns all news items that has name in English or Dutch with value `Name in English`
NewsItem::query()->whereJsonContainsLocales('name', ['en', 'nl'], 'Name in English')->get();// The last argument is the "operand" which you can tweak to achieve something like this:
// Returns all news items that has name in English with value like `Name in...`
NewsItem::query()->whereJsonContainsLocale('name', 'en', 'Name in%', 'like')->get();// Returns all news items that has name in English or Dutch with value like `Name in...`
NewsItem::query()->whereJsonContainsLocales('name', ['en', 'nl'], 'Name in%', 'like')->get();```
## Support us
[](https://spatie.be/github-ad-click/laravel-translatable)
We invest a lot of resources into creating [best in class open source packages](https://spatie.be/open-source). You can support us by [buying one of our paid products](https://spatie.be/open-source/support-us).
We highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using. You'll find our address on [our contact page](https://spatie.be/about-us). We publish all received postcards on [our virtual postcard wall](https://spatie.be/open-source/postcards).
## Documentation
All documentation is available [on our documentation site](https://spatie.be/docs/laravel-translatable).
## Testing
```bash
composer test
```## Contributing
Please see [CONTRIBUTING](https://github.com/spatie/.github/blob/main/CONTRIBUTING.md) for details.
## Security
If you've found a bug regarding security please mail [[email protected]](mailto:[email protected]) instead of using the issue tracker.
## Postcardware
You're free to use this package, but if it makes it to your production environment we highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using.
Our address is: Spatie, Kruikstraat 22, 2018 Antwerp, Belgium.
We publish all received postcards [on our company website](https://spatie.be/en/opensource/postcards).
## Credits
- [Freek Van der Herten](https://github.com/freekmurze)
- [Sebastian De Deyne](https://github.com/sebastiandedeyne)
- [All Contributors](../../contributors)We got the idea to store translations as json in a column from [Mohamed Said](https://github.com/themsaid). Parts of the readme of [his multilingual package](https://github.com/themsaid/laravel-multilingual) were used in this readme.
## License
The MIT License (MIT). Please see [License File](LICENSE.md) for more information.