Laravel 5.4: Como criar uma aplicação Multilingual

Hoje irei mostrar uma abordagem simples de trabalhar com uma aplicação de muitos idiomas.

Primeiro de tudo vamos precisar criar um arquivo de funções helpers para criarmos nossa função que irá tratar a URL e configurar nosso idioma. Para isso precisamos editar nosso arquivo composer.json da nossa aplicação inserindo uma chave “files” na seção “autoload” desta forma:

composer.json

"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/"
},
"files": [
"app/Helpers/functions.php"
]
},

Pronto! Agora vamos criar nosso arquivo de funções helpers no diretório app\Helpers\functions.php.

Feito isso, só precisamos rodar o comando composer dump-autoload para que estas mudanças façam efeito.

Bem, está na hora criarmos nossa função, certo? Então:

function parseLocale()
{
// Busca a primeira rota da URL
$locale = Request::segment(1);
    // Define os locales da aplicação
$languages = ['pt', 'it', 'fr', 'ru', 'es'];
    // Verifica se o locale passado na URL é válido
// Se sim, então muda o idioma da aplicação e retorna o locale
// Se não, então retorna a URL padrão e deixa o idioma padrão
if (in_array($locale, $languages)) {
App::setLocale($locale);
return $locale;
}
    return '/';
}

Beleza! Agora vamos para as rotas:

Route::prefix(parseLocale())->group(function () {
Auth::routes();
Route::get('home', 'HomeController@index')->name('home');
Route::get('/', 'PageController@getHome')->name('welcome');

...
});

Então… percebemos o uso da nossa função helper parseLocale() fazendo parte do prefixo de todas as rotas que iremos definir.

Bom, podemos adicionar nossos locales na pasta resources\lang do Laravel e brincar com as traduções!

Nessa abordagem você vai poder acessar seu domínio com ou sem o prefixo locale. Por exemplo, se você acessar www.site.com/about-us o Laravel vai retornar, de fato, a página About Us mas carregando o locale default configurado em config\app.php.

Agora, basta inserir /pt, /es, /fr, etc, que o Laravel vai verificar se o locale passado na URL é válido para vai mudar o idioma. Caso o locale não for válido, então retorna 404.

O ponto a favor desta abordagem é que nossa URL fica amigável para os otimizadores de buscas (SEO).

Mais em: https://laravel.com/docs/5.4/localization