Multilinguagens no Laravel 6

Mauricio Rodrigues
3 min readJan 30, 2020

Fala galera! Você quer utilizar multilinguagens no Laravel? Criei um tutorial para te auxiliar, então vamos lá!

Primeiramente é necessário que você instale o auth do Laravel (depois de ter criado o projeto é lógico), você pode utiliza o comando composer require laravel/ui.

Após ter instalado o auth, vamos criar as rotas das linguagens, isso não necessariamente deve ser o primeiro, mais vamos fazer, abra o arquivo de rotas em routes/web.php

Adicione o código abaixo:

Route::get(‘/’, function () {

return redirect(app()->getLocale());

});

Route::prefix(‘{lang}’)->group(function() {

Route::get(‘/’, function () {

return view(‘welcome’);

});

Auth::routes();

Route::get(‘/home’, ‘HomeController@index’)->name(‘home’);

});

Obs.: Lembrando que se você quiser que sua página seja traduzida você terá que adicionar a sua rota dentro da rota lang.

Após ter trocado o código pelo código acima, vamos criar um arquivo de configuração digitando o código: php artisan make:middleware SetLocale, ele irá criar um arquivo em app/Http/Middleware/SetLocale, abra o arquivo e digite o código:

public function handle($request, Closure $next)

{

app()->setLocale($request->getPreferredLanguage(config(‘app.languages’)));

return $next($request);

}

Depois que você adicionou o código na função handle, vá em app/Http/Kernel.php, e adicione o código: ‘setlocale’ => \App\Http\Middleware\SetLocale::class,

Desta forma:

Se você der um comando php artisan serve, provavelmente irá aparecer essa mensagem:

Esse erro está acontecendo por que lá no arquivo de rotas você adicionou o prefix {lang}, o que você precisa fazer é adicionar esse código app()->getLocale(), em app.blade.php, welcome.blade.php, e login.blade.php, na verdade você terá que colocar esse código em todas as rotas, por que as rotas estão dentro da rota lang, conforme a imagem abaixo.

Feito isso vá em config\app.php e adicione

‘languages’ => [‘fr’,’de’,’en’,’pt-BR’],

Abaixo de

Dessa forma:

É aqui que fica definido a linguagem

Feito isso vá em resources/views/layouts/app.blade e adicione

@foreach (config(‘app.languages’) as $locale)

<li class=”nav-item”>

<a class=”nav-link”

href=”{{ route(\Illuminate\Support\Facades\Route::currentRouteName(), $locale) }}”

@if (app()->getLocale() == $locale)

style=”font-weight: bold; text-decoration: underline” @endif>{{ strtoupper($locale) }}</a>

</li>

@endforeach

Conforme a imagem abaixo:

Logo após vá baixe o arquivo que está no github onde contém os arquivos de tradução em json, pelo link:

https://github.com/mauriciocoelho/lang

Após ter baixado descompacte e extraia na pasta resources/lang

Feito isso sua tela ficará assim:

Para que seja traduzido (label, button e etc), você deve utilizar esse formato: {{ __(‘Login’) }},

{{ __(‘Novo’) }}, {{ __(‘Cadastro’) }}, quanto a tradução deve ser feito no arquivo json de lang

Obs.: Para colocar uma língua padrão é só ir em config/app e alterar ‘locale’

Ex: ‘locale’ => ‘pt-BR’.

--

--