Laravel-Subdomain-Localization
, (*1)
Subdomain localization support for Laravel. Only for Laravel 5.4 Version (Fork LaurentEsc/Laravel-Subdomain-Localization), (*2)
Table of Contents
Installation
Composer
Add Laravel-Subdomain-Localization to your composer.json file., (*3)
"industryarena/laravel-subdomain-localization": "dev-master"
Run composer install to get the latest version of the package., (*4)
Manually
It's recommended that you use Composer, however you can download and install from this repository., (*5)
Laravel
Laravel-Subdomain-Localization comes with a service provider for Laravel., (*6)
To register the service provider in your Laravel application, open config/app.php and add the following line to the providers array:, (*7)
...
LaurentEsc\Localization\LocalizationServiceProvider::class
...
Laravel-Subdomain-Localization comes with 2 facades: Localize and Router., (*8)
If you want to use them, open config/app.php and add the following lines to the aliases array:, (*9)
...
'Localize' => LaurentEsc\Localization\Facades\Localize::class,
'Router' => LaurentEsc\Localization\Facades\Router::class,
...
Laravel comes with a middleware that can be used to enforce the use of a language subdomain., (*10)
If you want to use it, open app/Http/kernel.php and register this route middleware by adding it to the routeMiddleware array:, (*11)
...
'localize' => \LaurentEsc\Localization\Middleware\Localization::class,
...
Usage
Locale detection
Open app/Providers/RouteServiceProvider.php and add a call to detectLocale() from the boot method. For example, using the facade:, (*12)
...
use LaurentEsc\Localization\Facades\Localize;
...
public function boot(Router $router)
{
// This will guess a locale from the current HTTP request
// and set the application locale
Localize::detectLocale();
parent::boot($router);
}
...
Once you have done this, there is nothing more that you MUST do. Laravel application locale has been set and you can use other locale-dependant Laravel components (e.g. Translation) as you normally do., (*13)
Middleware
If you want to enforce the use of a language subdomain for some routes, you can simply assign the middleware provided, for example as follows in app/Http/routes.php:, (*14)
// Without the localize middleware, this route can be reached with or without language subdomain
Route::get('logout', 'AuthController@logout');
// With the localize middleware, this route cannot be reached without language subdomain
Route::group([ 'middleware' => [ 'localize' ]], function() {
Route::get('welcome', 'WelcomeController@index');
});
For more information about Middleware, please refer to Laravel docs., (*15)
Route translation
If you want to use translated routes (en.yourdomain.com/welcome, fr.yourdomain.com/bienvenue), proceed as follows:, (*16)
First, create language files for the languages that you support:, (*17)
resources/lang/en/routes.php:, (*18)
return [
// route name => route translation
'welcome' => 'welcome',
'user_profile' => 'user/{username}',
];
resources/lang/fr/routes.php:, (*19)
return [
// route name => route translation
'welcome' => 'bienvenue',
'user_profile' => 'utilisateur/{username}',
];
Then, here is how you define translated routes in app/Http/routes.php:, (*20)
Route::group([ 'middleware' => [ 'localize' ]], function() {
Route::get(Router::resolve('routes.welcome'), 'WelcomeController@index');
});
You can of course name the language files as you wish, and pass the proper prefix (routes. in the example) to the resolve() method., (*21)
Configuration
Configuration file
In order to edit the default package configuration, you can run the following artisan command:, (*22)
php artisan vendor:publish --provider="LaurentEsc\Localization\LocalizationServiceProvider" --tag="config"
Once you have done that, you will find the config file at config/localization.php., (*23)
Configuration values
-
available_locales (default: ['en', 'de'])
An array of the locales accepted by the routing system., (*24)
-
cookie_localization (default: true)
Use this option to enable or disable the use of cookies during the locale detection., (*25)
-
browser_localization (default: true)
Use this option to enable or disable the use of the browser settings during the locale detection., (*26)
-
cookie_name (default: 'locale')
Here you may change the name of the cookie used to save the locale.
This option is used only if localization with cookie is enabled., (*27)
-
domain (default: env('DOMAIN'))
Here you may change the name of the domain used in your application.
By default, the domain is read from the .env file., (*28)
Useful functions
The package provides useful functions that you can use - for example - in your views:, (*29)
Translate current URL
<a href="{{ Router::current('fr') }}">See the french version</a>
Use Router::current(string $locale) this to generate an alternate version of the current route. This will return an url with the proper subdomain and also translate the uri if necessary., (*30)
Get alternate versions of the current URL
@foreach (Router::getCurrentVersions() as $locale => $url)
<a href="{{ $url }}">{{ $locale }}</a>
@endforeach
Use Router::getCurrentVersions(bool $excludeCurrentLocale = true) to fetch all localized versions of the current route. This will return an array of $locale => $url items that you can use to generate links to alternate versions., (*31)
You can pass false as parameter for $excludeCurrentLocale to let function also returns an item for the current locale., (*32)
Get localized version for a given route
<a href="{{ Router::url('user_profile', [ 'username' => 'JohnDoe' ], 'fr') }}">See JohnDoe's profile</a>
Use Router::url($routeName, $routeAttributes = null, $locale = null) to generate an alternate version of the given route. This will return an url with the proper subdomain and also translate the uri if necessary., (*33)
You can pass route parameters if necessary. If you don't give a specific locale, it will use the current locale., (*34)
Changelog
To see what has changed in recent versions, see the CHANGELOG., (*35)
License
This package is licensed under the MIT license., (*36)