2017 © Pedro Peláez
 

library laravel-subdomain-localization

Subdomain localization support for Laravel

image

industryarena/laravel-subdomain-localization

Subdomain localization support for Laravel

  • Friday, July 6, 2018
  • by approached
  • Repository
  • 4 Watchers
  • 2 Stars
  • 4,607 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 9 Forks
  • 0 Open issues
  • 1 Versions
  • 21 % Grown

The README.md

Laravel-Subdomain-Localization

Latest Stable Version Total Downloads Build Status, (*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)

The Versions

06/07 2018

dev-master

9999999-dev https://github.com/LaurentEsc/Laravel-Subdomain-Localization

Subdomain localization support for Laravel

  Sources   Download

MIT

The Requires

 

The Development Requires

by Laurent Escalier

laravel php localization subdomain