Laravel5 multilanguage domains

552 Views Asked by At

I have some issues with Laravel5. I got multiple domains linked to single application, but each domain can have multiple languages. Locale string should not appear until different language is selected for domain.

Maybe some one has experience with this. etc.:

domain.com/home
domain.net
domain.lt/pagrindinis
domain.lt/en/home
1

There are 1 best solutions below

0
On

I finally found solution:

On app.php i made custom array for locations:

'domains' => [ 
   'domain_1' => [
     'locales' => ['en', 'lt'],
     'locale' => 'lt' // default locale for this domain
   ],
   'domain_2' => [
     'locales' => ['ru', 'en']
     'locale' => 'ru',
   ],
 ];

and in route service provider.

/**
     * Handle app requests
     *
     * @param Router $router
     * @param Request $request
     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
     */
    public function map(Router $router, Request $request)
    {
        $locale = $this->getLocaleByDomain($request);

        $requestLocale = $request->segment(1);

        $options = [
            'namespace' => $this->namespace
        ];

        if (in_array($requestLocale, Config::get('app.domains')[$request->getHost()]['locales'])) {
            $locale = $requestLocale;

            $options = array_merge(
                $options,
                [
                    'prefix' => $locale
                ]
            );
        }

        app()->setLocale($locale);

        $router->group($options, function ($router) {
            require app_path('Http/routes.php');
        });
    }

    /**
     * Retrieve locale by domain
     *
     * @param $request
     * @return mixed
     */
    protected function getLocaleByDomain($request)
    {
        $locale = Config::get('app.fallback_locale');

        if (array_key_exists($request->getHost(), Config::get('app.domains'))) {
            $locale = Config::get('app.domains')[$request->getHost()]['locale'];
        }

        return $locale;
    }

Routes.php file contains:

$router->get(trans('routes.contacts'),
    [
        'as' => 'contacts',
        'uses' => 'PagesController@contacts'
    ]
);

So what i reached is multiple domains, with multiple languages and pretty nice SEO url's for every locale. Maybe anyone can make some other ideas?