cheecodes/language-detection

This package is abandoned and no longer maintained. No replacement package was suggested.

1.0.1 2020-05-26 15:57 UTC

This package is auto-updated.

Last update: 2023-07-29 02:02:43 UTC


README

Latest Version on Packagist Total Downloads

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.