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

[SOLUCIONADO] seteando App::locale y redireccionando

Estas en el tema de seteando App::locale y redireccionando en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola a todos , Llevo unos días trasteando laravel 5 y la verdad es que este fmk me encanta! Me acabo de encallar en el ...
  #1 (permalink)  
Antiguo 03/04/2015, 03:23
Avatar de Djoaq  
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 11 años, 6 meses
Puntos: 38
seteando App::locale y redireccionando

Hola a todos ,

Llevo unos días trasteando laravel 5 y la verdad es que este fmk me encanta!

Me acabo de encallar en el siguiente tema...

La idea es que quiero dar soporte multilenguaje a mi aplicación .. pero no solo el contenido sino también me gustaría que las url's también cambiaran ...

Para ello en la carpeta lang he creado un archivo de traducciones de ruta.

---lang
-----es
------rutas.php
-----en
------rutas.php



route.php -> es

Código PHP:
Ver original
  1. return [
  2.  
  3.     'inicio' => '/inicio',
  4.     'interesados' => '/interesados',
  5.     'inmuebles' => '/inmuebles',
  6.     'propietarios' => '/propietarios',
  7.  
  8. ];

route.php -> en

Código PHP:
Ver original
  1. return [
  2.  
  3.     'inicio' => '/start',
  4.     'interesados' => '/interested',
  5.     'inmuebles' => '/estates',
  6.     'propietarios' => '/owners',
  7.  
  8. ];

Luego el enrutador tengo un controller preparado que recibe el idioma y la ruta que quiero traducir :

Código PHP:
Route::get('lang/{lang}/{ruta}',['uses' => 'LenguajeController@get']); 
Y por supuesto las rutas en los distintos idiomas:

Código PHP:
Route::get('/inicio', ['middleware' => 'auth''uses' => 'HomeController@index']);
Route::get('/start', ['middleware' => 'auth''uses' => 'HomeController@index']); 
El controller recibe 2 parámetros 1 el idioma que quiero cambiar y 2 la url a redireccionar :
Código PHP:
class LenguajeController extends Controller {
    
/**
     * Display a listing of the resource.
     *
     * @return Response
     */
    
public function get($lang,$url)
    {        
        if (
Auth::user())
        {
            
App::setLocale($lang);

            return 
redirect(trans('rutas.'.$url));           
        }
        
    }    


Digamos que le paso al LenguajeController ,param1 'en' (el idioma a cambiar) y param2 /start (el nombre de la ruta a redirigir) .
El cambio de locale lo hace bién dentro del controller pero al redirigir a
/start me sigue saliendo el idioma por defecto.. es .

Solo cambia el idioma si no hago redirección .. pero entonces no puedo cambiar la url al idioma seleccionado ...
  #2 (permalink)  
Antiguo 03/04/2015, 05:24
Avatar de Djoaq  
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 11 años, 6 meses
Puntos: 38
Respuesta: seteando App::locale y redireccionando

Me respondo a mí mismo ...

El caso es que el enfoque no era el adecuado ... cuando usaba el método redirect .. lo que hacia era irse a saco a esa url .. pero en realidad no volvía a pasar por el enrutador, lo que deduzco que el enrutador se carga una sola vez y no cada vez que entra una petición.

Al final tengo un front controller el cual recibe el nombre de la página que se solicita y entonces busco y averiguo que idioma pertenece dentro de mis carpetas de traducciones :

Código PHP:
    public function recupera_lang($ruta){
            
//obtenemos las cadenas de todas las traducciones
            
$languages File::directories(base_path().'/resources/lang');
            foreach (
$languages as $key => $value) {
                 
$lang[$key] = File::getRequire($value."/rutas.php"); 
                 
//ahora por cada carpeta lang buscaremos el archivo rutas
            
}
            foreach (
$lang as $key => $value) {
                
//recorremos todos los arrays de lang 
                
foreach ($value as $k => $v) {
                    
//borramos el slash de la traducción /start --> start
                    
$ruta_langsltrim ($v'/');
                    if (
$ruta_langs ==$ruta) {
                         
//devolvemos el indice de array que es igual al indice 
                         // de la carpeta :
                         // de -->0
                         // en -->1
                         // es -->2
                         
return $key;
                         
//ahora podemos setear el App::locale Sabiendo en que
                         //idioma nos esta pidiendo la petición.
                    
}
                }

            }
    } 
Luego seteo el App::locale que corresponde y a correr.
Llevo unos días trasteando laravel así que supongo que hay soluciones mas elegantes.. de momento a mí esta me hace el apaño y espera que pueda ayudar a alguién!.

Un saludo!

Etiquetas: enrutamiento, laravel, multilenguaje, php, redireccion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:11.