Skip to content

You have a multilingual laravel application? Then this package is for you! It ships a nice language switcher to your application which is configurable to your liking! Go ahead and try it out. Let me know via the issue tracker if you find a bug or have a feature request.

License

lankhaar/laravel-multilingual

Repository files navigation

Configurable language switcher delivered to your multilingual laravel application

Installation

You can install the package via composer:

composer require lankhaar/laravel-multilingual

Then publish the configurations:

php artisan vendor:publish --provider="Lankhaar\Multilingual\MultilingualServiceProvider"

Usage

Configure available locales

You can edit the config/multilingual.php file to configure the available locales as follows:

    'availableLocales' => [
        'en' => 'English',
        'nl' => 'Dutch',
    ],

Display language switcher in navigation

The current language switcher is only compatible with bootstrap navbars. If you're not using bootstrap in your project, you can easily create your own layout for it. If you are using bootstrap, just call @multilingualSwitcher in your navbar like this:

<nav id="navbar" class="navbar">
    <ul class="nav">
        <li class="nav-item">
            <a class="nav-link" href="{{ route('home') }}">{{ __('Home') }}</a>
        </li>
        <li class="nav-item">
            <a class="nav-link" href="{{ route('about') }}">{{ __('About') }}</a>
        </li>
        <li class="nav-item">
            <a class="nav-link" href="{{ route('services') }}">{{ __('Services') }}</a>
        </li>
        <li class="nav-item">
            <a class="nav-link" href="{{ route('contact') }}">{{ __('Contact') }}</a>
        </li>
        @multilingualSwitcher
    </ul>
</nav>

Create your own language switcher layout

As stated earlier, the standard layout shipped with the package is specifically designed to fit in a bootstrap navigation. If you aren't using bootstrap, you're probably better off creating your own layout.

Create a file in your project at resources/views/vendor/laravel-multilingual/language-switcher.blade.php to overwrite the existing language switcher template. See code snippet below for an example on how to loop over the available locales and link to them.

@if(count($locales = getMultilingualLocales()) > 1)
    <li class="dropdown">
        <a href="#"><span>{{ __('Language') }}</span> <i class="fa fa-chevron-down" aria-hidden="true"></i></a>
        <ul>
            @foreach($locales as $locale => $label)
                <li><a href="{{ route('switch-locale', ['locale' => $locale]) }}">{{ __($label) }}</a></li>
            @endforeach
        </ul>
    </li>
@endif

Now you can call it wherever you want with the @multilingualSwitcher blade directive

Testing

composer test

Changelog

Please see CHANGELOG for more information what has changed recently.

Supported features

Feel free to creat issues for feature requests!

  • Support languages per session (No changes in domain or URL structure);
  • Support languages per domain (example.com, example.nl);
  • Support languages in url (/en/example, /nl/example);

Advanced config

/*
 * Define the default locale.
 */
'defaultLocale' => env('LOCALE_DEFAULT', 'en'),

/*
 * Define the locale identifier type.
 *
 * Possible values:
 * - session: Locale chosen by the user is stored in the session;
 * - domain: Domain will switch based of chosen locale (domains can be configured in localeDomains config);
 * - url: URL's change based of the chosen locale (routes will be prefixed with the locale like /en/example or /nl/example);
 */
'localeIdentifierType' => env('LOCALE_IDENTIFIER_TYPE', 'session'),

/*
 * Configure the available locales for your application.
 * Define as an array with locale as array key and label in language switcher as array value.
 */
'availableLocales' => [
    'en' => 'English',
    'nl' => 'Dutch',
],

/*
 * Locale domains (only used when localeIdentifierType is set to domain).
 */
'localeDomains' => [
    'en' => env('LOCALE_EN_DOMAIN_URL', 'example.com'),
    'nl' => env('LOCALE_NL_DOMAIN_URL', 'example.nl'),
],

About

You have a multilingual laravel application? Then this package is for you! It ships a nice language switcher to your application which is configurable to your liking! Go ahead and try it out. Let me know via the issue tracker if you find a bug or have a feature request.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published