Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Laravel: Multiidiomas

Estas en el tema de Laravel: Multiidiomas en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola a todos: He empezado a ver hoy la forma de hacer multiidiomas en Laravel y me funciona perfectamente pero creo que la forma de ...
  #1 (permalink)  
Antiguo 09/01/2017, 09:41
 
Fecha de Ingreso: junio-2007
Mensajes: 259
Antigüedad: 9 años, 8 meses
Puntos: 5
Laravel: Multiidiomas

Hola a todos:

He empezado a ver hoy la forma de hacer multiidiomas en Laravel y me funciona perfectamente pero creo que la forma de hacerlo no es la más correcta del todo.

Lo que hago es el routes/web.app:

Código PHP:
Ver original
  1. Route::get('/{locale}/home', 'HomeController@index');

Y el HomeController:
Código PHP:
Ver original
  1. public function index($locale)
  2.     {
  3.         \App::setLocale($locale);
  4.          ...
  5.         return view('home');
  6.     }

Lo que me parece raro es que en todas las funciones index de cada uno de los controllers tenga que poner lo de \App::setLocale($locale);

Seguro que existe una manera en el routes/web.app que dependiendo de la url que se esté pasando detecte cuál es el locale y haga el correspondiente setLocale. Pero por mucho que he buscado en la documentación de Laravel y en Google no encuentro cómo hacerlo.

¿Alguna sugerencia? Gracias
  #2 (permalink)  
Antiguo 09/01/2017, 11:00
 
Fecha de Ingreso: octubre-2009
Mensajes: 164
Antigüedad: 7 años, 4 meses
Puntos: 15
Respuesta: Laravel: Multiidiomas

coloca tus rutas normales y en la entrada de cada controlador verifica el idioma enviado por el navegador
  #3 (permalink)  
Antiguo 09/01/2017, 11:22
 
Fecha de Ingreso: junio-2007
Mensajes: 259
Antigüedad: 9 años, 8 meses
Puntos: 5
Respuesta: Laravel: Multiidiomas

Pero si eso es exactamente lo que he hecho. Si funcionar me funciona, lo que pasa es que me extraña mucho que para cada uno de los controladores tenga que ir verificando el locale. Estoy seguro que el routes/web.php tiene que haber alguna forma de detectarlo y poner el setLocale antes de entrar en cada controlador.
  #4 (permalink)  
Antiguo 09/01/2017, 11:39
Avatar de hhs
hhs
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.732
Antigüedad: 3 años, 7 meses
Puntos: 326
Respuesta: Laravel: Multiidiomas

utiliza un middleware https://laravel.com/docs/5.3/middleware
__________________
Saludos
A class should have only one reason to change.
Laraveles
  #5 (permalink)  
Antiguo 19/01/2017, 21:26
 
Fecha de Ingreso: julio-2014
Mensajes: 179
Antigüedad: 2 años, 7 meses
Puntos: 18
Respuesta: Laravel: Multiidiomas

Laravel ya viene integrado con un sistema multilenguaje. En config app.php solo debes de setear el lenguaje por defecto. Y dentro de la carpeta "resources/lang" tienes una serie de carpetas por cada lenguaje y dentro sus archivos correspondientes por defecto (le puedes añadir todos los que quieras), cada uno con su traducción por idioma de la carpeta.

El inconveniente es que mientras diseñas el proyecto, cada vez que quieras imprimir las palabras y frases que conforman tu proyecto tienes que poner @lang('nombre_del_archivo.ruta_a_seguir');

Es decir, si dentro de las carpetas "en" y "es" tienes un archivo que se llama por ejemplo "section"
con esta estructura...

Código:
<?php

return [
   'dashboard' => [
       'title' => 'Pizarra',
   ],
];
Entonces, en los lugares que quieras imprimir "Pizarra" ya sea en el idioma que sea, solo tienes que poner @lang('section.dashboard.title')

Laravel detectará automáticamente el idioma que está utilizando el usuario y se lo mostrará en ese idioma, si no existe traducción, se lo mostrará en el idioma por defecto que seteaste.



La zona horaria es GMT -6. Ahora son las 02:32.