Laravel 5.6 Localization package with
- Language chooser
- Different language sessions for website and CMS / back
- List of languages stored at Database table languages
- At table languages you can set boolean values for [active, default]
You can see working demo
$ composer require adamibrahim/localization
If you installing at laravel 5.5 or higher then you may go directly to Publish other wise you will need to edit composer.json, register the Service Provider and middleware
Add this code to your composer.json under the autoload at your main directory
"psr-4": {
"Adam\\Localization\\": "vendor/adamibrahim/localization/src"
}
At file config/app.php register service provider under * Package Service Providers...
Adam\Localization\LocalizationServiceProvider::class,
if you are using Laravel version lower than 5.5 then you need to register the lang middleware at your App\Http\Kernel.php
- At protected $routeMiddleware = [ ] array add the below code
'lang' => \Adam\Localization\Middleware\Localization::class,
Optional publishing flags folder with flags svg images / and config file
$ php artisan vendor:publish --tag=Localization --force
run the Artisan migration command
$ php artisan migrate
Run the Artisan Seeding command
$ php artisan db:seed --class=Adam\Localization\database\seeds\LanguagesTableSeeder
If you receive this Error:
Then you may need to dump-autoload by running this command
$ composer dump-autoload
Then run the seeding command once again
$ php artisan db:seed --class=Adam\Localization\database\seeds\LanguagesTableSeeder
You need to add 'lang' middleware to all your routes
->middleware('lang')
Add the Bootstrap language change buttons to your website page/s
@if (($languages)->count() > 1)
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<img src="{{ asset('img/flags/'.$lang['flag']) }}"> {{ $lang['abbr'] }}<span class="caret"></span>
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdownMenuLink">
@foreach($languages as $language)
<a href="{{ route('language.change', $language->abbr) }}" class="dropdown-item">
<img src="{{ asset('img/flags/'.$language->flag) }}"> {{$language->native}}
</a>
@endforeach
</div>
</li>
@endif
Optional you can add different language session if needed for example admin control panel
@if (($languages_back)->count() > 1)
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<img src="{{ asset('img/flags/'.$lang_back['flag']) }}"> {{ $lang_back['abbr'] }}<span class="caret"></span>
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdownMenuLink">
@foreach($languages_back as $language)
<a href="{{ route('admin.back.language', $language->abbr) }}" class="dropdown-item">
<img src="{{ asset('img/flags/'.$language->flag) }}"> {{$language->native}}
</a>
@endforeach
</div>
</li>
@endif
Optional The lang_back session set the app locale if the rote prefix is 'admin' if you wish to change the route prefix simple modify prefix at the config file config\localization.php
Please see CONTRIBUTING and CODE_OF_CONDUCT for details.
If you discover any security related issues, please email :author_email instead of using the issue tracker.
The MIT License (MIT). Please see License File for more information.