kingscode/laravel-localize is a Laravel package for laravel localization in a yiffy..
It currently has 2 GitHub stars and 907 downloads on Packagist (latest version v2.2).
Install it with composer require kingscode/laravel-localize.
Discover more Laravel packages by kingscode
or browse all Laravel packages to compare alternatives.
Last updated
An as minimalistic as possible localization package, makes it so the app.locale is set to nl in the case of /nl/home.
Require the package.
composer require kingscode/laravel-localize
... and optionally publish the config.
php artisan vendor:publish --provider="KingsCode\LaravelLocalize\LocalizeServiceProvider"
Add the middleware to the needed middleware groups, in our case only to the web group.
<?php
namespace App\Http;
class Kernel extends HttpKernel
{
...
/**
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
...
LocaleSelector::class, // <<<<<< Here it is.
SubstituteBindings::class, // Its best to register before substitute bindings.
...
],
];
...
}
Now you must register the route file that holds your localized routes, you will do this twice:
This makes it so that your default locale can use / instead of being forced to have /en when your website is english by default.
<?php
use Illuminate\Contracts\Config\Repository;
use Illuminate\Routing\Router;
use KingsCode\LaravelLocalize\Localize;
class RouteServiceProvider extends ServiceProvider
{
public function map()
{
// Web routes without localization, like a "/file/{file}" route or such.
$this->mapWebRoutes();
// And as the last method call you'll do the localized web routes.
$this->mapLocalizedWebRoutes();
}
/**
* Define the localized "web" routes for the application.
*
* @return void
*/
protected function mapLocalizedWebRoutes()
{
// We'll take stuff from the config to keep things easily configurable.
// Not a must, but it prevents you from having to override stuff.
$config = $this->app->make(Repository::class);
// We'll need a router to register routes duh.
$router = $this->app->make(Router::class);
/** @var Localize $localize */
$localize = $this->app->make(Localize::class);
// Okay so here is an IMPORTANT part.
// Register the {locale} routes first otherwise {locale}/{any} will not be reachable and {any} will catch everything.
$router->middleware('web')
->namespace($this->namespace)
->prefix('{' . $config->get('localize.route_parameter_key') . '}') // We add the prefix.
->where([$config->get('localize.route_parameter_key') => $localize->getRouteRegex()])
->name($config->get('localize.route_name_prefix') . '.') // And the name prefix.
->group(base_path('routes/localized.web.php'));
$router->middleware('web')
->namespace($this->namespace)
->group(base_path('routes/localized.web.php'));
}
}