despark / laravel-db-localization
Database localization package for laravel framework
Installs: 378
Dependents: 0
Suggesters: 0
Security: 0
Stars: 11
Watchers: 10
Forks: 6
Open Issues: 0
Requires
- php: >=7.0
- illuminate/database: 5.4.*
- illuminate/routing: 5.4.*
- illuminate/support: 5.4.*
Requires (Dev)
- graham-campbell/testbench: ^3.2
- mockery/mockery: 0.9.*
- orchestra/database: v3.4.0-BETA1
- phpunit/phpunit: ~5.7
README
Note: if you are looking for the version for Laravel 4.2 check out v1 branch.
Installation
Open composer.json
file of your project and add the following to the require array:
"despark/laravel-db-localization": "2.0.*"
Now run composer update
to install the new requirement.
Once it's installed, you need to register the service provider in config/app.php
in the providers array:
'providers' => array( ... Despark\LaravelDbLocalization\LaravelDbLocalizationServiceProvider::class, );
Publish config file:
php artisan vendor:publish --provider="Despark\LaravelDbLocalization\LaravelDbLocalizationServiceProvider" --tag="config"
Publish migrations:
php artisan vendor:publish --provider="Despark\LaravelDbLocalization\LaravelDbLocalizationServiceProvider" --tag="migrations"
How to use it
Database Example
- First you need to create your languages table
Schema::create('i18n', function (Blueprint $table) { $table->increments('id'); $table->string('locale')->unique()->index(); $table->string('name')->index(); $table->timestamps(); });
- Example of translatable table
Schema::create('contacts', function (Blueprint $table) { $table->increments('id'); // untranslatable columns $table->string('fax'); $table->string('phone'); $table->timestamps(); });
- Example of translations table
Schema::create('contacts_i18n', function (Blueprint $table) { $table->integer('contact_id')->unsigned(); $table->foreign('contact_id')->references('id')->on('contacts')->onDelete('cascade'); $table->integer('i18n_id')->unsigned(); $table->foreign('i18n_id')->references('id')->on('i18n')->onDelete('cascade'); // translatable columns $table->string('name', 100); $table->string('location', 100); $table->unique(['contact_id', 'i18n_id']); $table->primary(['contact_id', 'i18n_id']); $table->timestamps(); });
Model Example
use Despark\LaravelDbLocalization\i18nModelTrait; class Contacts extends Eloquent { use i18nModelTrait; // You must use i18nModelTrait protected $fillable = [ 'fax', 'phone', ]; protected $translator = 'Despark\LaravelDbLocalization\ContactsI18n'; // Here you need to add your translations table model name protected $translatorField = 'contact_id'; // your translator field name protected $localeField = 'i18n_id'; // here is your locale field name protected $translatedAttributes = ['contact_id', 'i18n_id', 'name', 'location']; // translatable fillables } class ContactsI18n extends Eloquent { protected $table = 'contacts_i18n'; }
View example
Create
{!! Form::text("fax", null) !!} {!! Form::text("phone", null) !!} @foreach($languages as $language) {!! Form::text("name[name_$language->id]", null) !!} // Follow this convention array( fieldname_languageId ); {!! Form::text("location[location_$language->id]", null) !!} @endforeach
Retrieve
// locale string $contacts->translate('en'); // all fields $contacts->translate('en')->location; // specific field // locale id $i18nId = 2; $contacts->translate($i18nId); // all fields $contacts->translate($i18nId)->location; // specific field
Config Example
config/laravel-db-localization.php 'locale_class' => 'Despark\LaravelDbLocalization\I18n', // Eloquent model that handles your languages.