Mostrando entradas con la etiqueta Multidiomas. Mostrar todas las entradas
Mostrando entradas con la etiqueta Multidiomas. Mostrar todas las entradas

Multiidiomas tanto en front como admin

Por ejemplo en HomeController crear:
public function setlocale($locale)  {
if (! in_array($locale, ['en', 'es', 'fr'])) {
abort(400);
}
App::setLocale($locale);
session(['language' => $locale]);
return redirect()->back();
}

En routes/web.php:
Route::get("/setlocale/{locale}", "HomeController@setlocale")->name("setlocale");

En todos los métodos de nuestros controllers poner:
// Ojo hay que añadir al método lo de Request $request si no lo tuviera ya de antes
App::setLocale($request->session()->get('language'));

En cualquier view:
<h1>LOCALE FRONT: {{ App::getLocale() }}</h1>
<a href="{{ route('setlocale',['es']) }}">ES</a>
<a href="{{ route('setlocale',['en']) }}">EN</a>
<a href="{{ route('setlocale',['fr']) }}">FR</a>
...
<p>@lang('messages.login_ok')</p>
<p>@lang('messages.hola')</p>

Multidiomas: con Ajax

a) En routes/web.php:
Route::get('ajaxRequest', 'AjaxController@ajaxRequest');
Route::post('ajaxRequest', 'AjaxController@ajaxRequestPost');

b) En funciones.js
function switchLang(locale) {
    $.ajax({
        type:'POST',
        url:'http://localhost/edc_laravel/public/ajaxRequest', // Hasta q sepa como sacar la ruta root
        data:{
            locale: locale
        },
        success:function(data){
            location.reload();
        }
    });
}

c) En header.blade.php:
{{app()->setLocale(session()->get('language'))}}
...
<li><a href="javascript:void(0);" onclick="switchLang('es');">ESP</a></li>
<li><a href="javascript:void(0);" onclick="switchLang('en');">ING</a></li>

d) En el middleware Language.php:
public function handle($request, Closure $next)
    {
        app()->setLocale(session()->get('language'));
        return $next($request);
    }

e) En AjaxController:
public function ajaxRequestPost()  {
  session(['language' => request()->locale]);
  App::setLocale(request()->locale);
  return request()->locale;
}

Multidiomas

a) Crear en /resources/lang las carpetas es, en, fr y pt (o las que se quieran)

b) Dentro de cada una de esas subcarpetas crear messages.php:
return [
    'ganador_oscar' => 'Oscar Winner',
    'nombre' => 'Name'
];

c) php artisan make:middleware Language:
public function handle($request, Closure $next)
    {
        $local = ($request->hasHeader('X-localization')) ? $request->header('X-localization') : 'en';
        app()->setLocale($local);
        return $next($request);
    }

d) Registrar ese middleware en el \App\Http\kernel.php:
\App\Http\Middleware\Language::class,

e) php artisan make:controller LanguageController:
public function index($locale) {
        App::setLocale($locale);
        $cineastas = Cineasta::orderBy('nombre', 'asc')->paginate(6);
        return view('cineastas.list',compact('cineastas'));
}

f) En la vista del header (por ejemplo):
<li><a href="{{route('cambiar_idioma','es')}}">ESP</a></li>
<li><a href="{{route('cambiar_idioma','en')}}">ING</a></li>

g) En routes/web.php:
Route::get('/language/{id}', 'LanguageController@index')->name('cambiar_idioma');

h) En la vista donde quieras hacer los cambios:
@lang('messages.nombre')
@lang('messages.ganador_oscar')