Multilinguagens no Laravel 6
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’.