Skip to content

Easily translate your laravel models to as many languages you want.

License

Notifications You must be signed in to change notification settings

EscapeWork/laravel-translations

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Laravel Translations

StyleCI Status Software License Latest Stable Version Total Downloads

Easily translate your laravel models to as many languages you need.

Installation

Add this line to your composer.json file:

    "escapework/laravel-translations": "0.2.*"

And add this service provider to your laravel providers:

    EscapeWork\Translations\TranslationServiceProvider::class

And publish the migrations running the following command:

$ php artisan vendor:publish --provider="EscapeWork\Translations\TranslationServiceProvider"
$ php artisan migrate

Usage

Creating the locales

First, you need to create the locales that your models will be translated.

EscapeWork\Translations\Locale::create(['id' => 'pt-br', 'title' => 'Português (Brasil)']);
EscapeWork\Translations\Locale::create(['id' => 'en',    'title' => 'English']);

Then, you need to import the Translatable in your models.

use EscapeWork\Translations\Translatable;
...

class Product extends Model
{

    use Translatable;
}

Storing a translation

For storing a translation, you can do the following:

// $data can have as many fields you want
$data = [
    'title'       => 'My translated title',
    'description' => 'Lorem ipsum dolor sit amet, consectetur adipisicing elit',
];

$product->storeTranslation((array) $data, 'pt-br');

Here it's an example on how you can use with Laravel $request object.

$product = Product::find(1);

foreach ((array) $request->translations as $locale => $data) {
    $product->storeTranslation((array) $data, $locale);
}

Deleting translations from a model

$product->deleteTranslations();

Getting a translation

For getting an existing translation, you just need to do this:

$product = Product::find(1);
echo $product->translations->_get('title'); // this will get the translation for the current config('app.locale') value

If you need an translation for an specific locale, just pass the locale as the second argument:

$product = Product::find(1);
echo $product->translations->_get('title', 'pt-br');

If you don't pass the $locale, the default is gonna be the config('app.locale') value.

You can also do something like this to make your life easier:

class Product extends Model
{
    ...
    public function getTitleAttribute()
    {
        return $this->translations->_get('title');
    }
    ...
}

// then, just call like a simple field
echo $product->title;

Next steps

  • Testing;
  • Make use of MySQL 5.7 JSON types, where a search inside the translations will be available;

License

See the License file.

About

Easily translate your laravel models to as many languages you want.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages