adamibrahim / localization
Laravel 5.6 Localization package with language chooser
Requires
- php: ~5.6|~7.0
- illuminate/support: ~5.1
Requires (Dev)
- phpunit/phpunit: >=5.4.3
- squizlabs/php_codesniffer: ^2.3
README
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]
Demo
You can see working demo
Install
Install the package Via Composer
$ 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
composer.json
Add this code to your composer.json under the autoload at your main directory
"psr-4": { "Adam\\Localization\\": "vendor/adamibrahim/localization/src" }
Service Provider
At file config/app.php register service provider under * Package Service Providers...
Adam\Localization\LocalizationServiceProvider::class,
Middleware
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,
Publishing
Optional publishing flags folder with flags svg images / and config file
$ php artisan vendor:publish --tag=Localization --force
Database Migrating
run the Artisan migration command
$ php artisan migrate
Seeding
Run the Artisan Seeding command
$ php artisan db:seed --class=Adam\Localization\database\seeds\LanguagesTableSeeder
Artisan Seed Error
If you receive this Error:
Class Adam\Localization\database\seeds\LanguagesTableSeeder does not exist
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
Usage
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
Contributing
Contributing
Please see CONTRIBUTING and CODE_OF_CONDUCT for details.
Security
If you discover any security related issues, please email :author_email instead of using the issue tracker.
Credits
License
The MIT License (MIT). Please see License File for more information.