Skip to content

Instantly share code, notes, and snippets.

@jacekd
Created January 18, 2013 07:40
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save jacekd/4562959 to your computer and use it in GitHub Desktop.
Save jacekd/4562959 to your computer and use it in GitHub Desktop.
Multilingual URLs in Laravel 4
<?php
/*
* Multilingual URLs in Laravel 4
*/
//config/app.php
return array(
...
'languages' => array('en', 'gr'),
...
);
// filters.php
App::before(function($request)
{
$uri = $request->server->get('REQUEST_URI');
foreach(Config::get('app.languages') as $language){
if(preg_match('/^\/'.$language.'(\/|\z|\?.*|#(.*))/', $uri)){
Config::set('app.locale', $language);
$newUri = '/'.substr($uri, 3);
$request->server->set('REQUEST_URI', $newUri);
}
}
});
@minas7111
Copy link

Maybe App::before can be replaced by this code

App::before(function($request)
{
    // default browser language
    $language = substr($request->server->get('HTTP_ACCEPT_LANGUAGE'), 0, 2);

    // language set from route
    if (null !== $request->segment(1)) {
        $routeLanguage = $request->segment(1);
        if (in_array($routeLanguage, Config::get('app.languages'))) {
            $language = $routeLanguage;
        }
    }
    // set the language
    Config::set('app.locale', $language);
    App::setLocale($language);
});

In my case, I wanted to keep the language in URL.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment