cheecodes / language-detection
Requires
- php: ^7.1
- illuminate/support: ^5.8|^6.0|^7
- laravel/framework: ^5.8|^6.0|^7
Requires (Dev)
- orchestra/testbench: ^4.0
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2023-07-29 02:02:43 UTC
README
This package allows you to set the application language based on request parameters like Accept-Language, a cookie, the session values. You can easily extend the detection with your own loaders aswell.
Installation
You can install the package via composer:
composer require cheecodes/language-detection
You should then publish the config
php artisan vendor:publish
Usage
Globally
If you want to use the Middleware globally, you can register it in App\Http\Kernel
like this
protected $middleware = [ // ... DetectLanguage::class, // ... ];
Aliasing
To use an alias for this middleware, register it in your $routeMiddleware
in the Kernel
protected $routeMiddleware = [ // ... 'language' => DetectLanguage::class, // ... ];
Different stack of loaders
The DetectLanguage
Middleware accepts a parameter that determines the group of loaders to be used.
Those groups can be defined in the config like this:
'loaders' => [ // Default group 'default' => [ FromHeader::class, FromQueryParameter::class, FromSession::class, FromCookie::class, ], // custom group 'custom' => [ FromHeader::class, ] ],
The names can be chosen as you see fit.
To use your custom loader stack, I firstly recommend you alias the middleware to something like language
.
You can then use it in your routes file like this:
Route::group('/admin', function() { // Your routes go here })->middleware('language:custom'); // Changing the loader stack to "custom"
Writing your own loader
Writing your own loader is straightforward. All you need to do is write a class that implements CheeCodes\LanguageDetection\Loader\LoaderContract
.
This interface only exposes one single method:
public function load(Request $request, array $config): ?string
All you need to do is return a language key if your loader matched, or null
if it didn't.
If you return a string and that string is in the allowed languages array, loader processing is stopped.
If you return null, the next loader is called or the default language is used if no further loader is in the current stack.
To register your custom loader, just add the FQDN to the loader stack:
'loaders' => [ 'default' => [ // ... Acme\Loaders\MyCustomLoader::class, ] ];
The loaders are resolved with Laravels IoC Container, so you can easily use constructor injection like you're used to.
Testing
composer test
Changelog
Please see CHANGELOG for more information what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security
If you discover any security related issues, please email fabian@chee.codes instead of using the issue tracker.
Credits
License
The MIT License (MIT). Please see License File for more information.
Laravel Package Boilerplate
This package was generated using the Laravel Package Boilerplate.