Package Data | |
---|---|
Maintainer Username: | boudydegeer |
Maintainer Contact: | boudydegeer@mosaiqo.com (Boudy De Geer) |
Package Create Date: | 2015-08-16 |
Package Last Update: | 2015-10-20 |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-11-19 03:17:28 |
Package Statistics | |
---|---|
Total Downloads: | 44 |
Monthly Downloads: | 2 |
Daily Downloads: | 0 |
Total Stars: | 1 |
Total Watchers: | 2 |
Total Forks: | 0 |
Total Open Issues: | 0 |
This is a Laravel 5 package to have multi language models. It is prepared to use with MongoDB and Eloquent (it is planed to make it work also with MySQL).
This package was created to easily store the multi language models by embedsOne
relations.
Its a Plug & Play package, if you are using Laravel MondoDB.
composer require mosaiqo/translatable
or put it in your composer.json file
{
...
'require' : {
...
"mosaiqo/translatable": "dev-master"
}
...
}
config/app.php
Mosaiqo\Translatable\TranslatableServiceProvider::class,
You can change the values, if you like.
php artisan vendor:publish --provider="Mosaiqo\Translatable\TranslatableServiceProvider" --tag="config"
We are still working on this package. It will be nice if you can get us some feedback.
If you find some errors or have an idea feel free to open a new issue .
use
the Mosaiqo\Translatable\Traits\Translatable
in the models you want to have multi language ability.Locale
to it (You can override it in the config file).modelname
and append Locale
to it.protected $translatableAttributes
.<?php namespace App;
use Jenssegers\Mongodb\Model;
class Article extends Model
{
use \Mosaiqo\Translatable\Traits\Translatable;
protected $fillable = ['commentable'];
/**
* This are the attributes you want to have in multiple languages.
*/
protected $translatableAttributes = ['title', 'slug'];
/**
* This is optional by default it will search for App\ArticleLocale.
*/
protected $translationModel = 'Mosaiqo\Translatable\Tests\Models\ArticleLocale';
}
The translation model should look similar to this. It is necesary to make the attributes fillable for the MassAsignment.
<?php namespace App;
use Jenssegers\Mongodb\Model;
class ArticleLocale extends Eloquent
{
protected $fillable = ['title', 'slug'];
}
It's very esay like with a normal model, the only difference is that you pass the translatable attributes inside an array and the key is the locale value.
$article = Article::create([
'commentable' => true,
'published' => true,
'en' => [
'title' => 'My title',
'body' => 'This is the text for my new post ...'
]
]);
There is an other method, you can first create the model and than assign it the translations.
$article = Article::create([
'commentable' => true
]);
$article->en([
'title' => 'My title',
'body' => 'This is the text for my new post ...'
]);
$article->es([
'title' => 'Mi titulo',
'body' => 'Este es mi texto para mi nuevo post ...'
]);
Assuming you have a model stored in the DDBB.
$article = Article::first();
This will output the attribute in the language you use, in this particular cas es()
will return 'Mi titulo'.
echo $article->es()->title;
And here 'My title'.
echo $article->en()->title;
You also can assign it to a variable to use it later.
$article_es = $article->es();
$article_en = $article->en();
There is a more verbose mode if you like.
$article->translate('es')->title;
What if the translation doesn't exists, doesn't mather you can try with the default fallback language if the one you need is not available, just passing the second argument true
.
$article->translate('de', true)->title;
Or you can use the alias for it
$article->translateOrDefault('de')->title;
```
You can also set the fallback language for this particular call if you want to display it diferent.
```php
$article->translate('de', 'es')->title;
You can know if a Model has a translation or not. This will return wheter true/false.
$article->hasTranslation('fr');
$article->hasTranslation('en');
// or
$article->isTranslated('en');
$article->isTranslated('ca');
You can get the hole translations instance, it will return a collection of the ArticleLocale
$article->translations();