Capturar idioma navegador (codeigniter)

Iniciado por KateLibby, 17 Noviembre 2011, 15:25 PM

0 Miembros y 1 Visitante están viendo este tema.

KateLibby

¿Sabéis alguna forma de hacer esto mismo pero con el framework Codeigniter? Si lo pongo tal cual me da error.

$_SERVER['HTTP_ACCEPT_LANGUAGE']

Gracias

madpitbull_99

Puedes usar la clase UserAgent.

Con el método $this->agent->accept_lang().

Código (php) [Seleccionar]
if ($this->agent->accept_lang('en'))
{
    echo 'You accept English!';
}





«Si quieres la paz prepárate para la guerra» Flavius Vegetius


[Taller]Instalación/Configuración y Teoría de Servicios en Red

KateLibby

Gracias por tu respuesta. He visto que podía usar esta sentencia, pero no he llegado a mirármela detenidamente proque creo que no me serviría para lo que quiero hacer.

Lo que quiero es capturar el idioma del navegador para hacer que al entrar en la página se dirija directamente a ese idioma, en lugar de poner uno por defecto.

madpitbull_99

Te puede servir perfectamente para lo que tu quieres.

En el constructor del controlador, lo usas así:

Código (php) [Seleccionar]
if ($this->agent->accept_lang('en'))
{
    redirect('site/english');
}else if ($this->agent->accept_lang('es')
{
    redirect('site/spanish');
}



Claro está que el controlador debe tener los métodos english y spanish.




«Si quieres la paz prepárate para la guerra» Flavius Vegetius


[Taller]Instalación/Configuración y Teoría de Servicios en Red

KateLibby

No lo consigo.

He cargado la clase $this->load->library('user_agent'); en el controlador home.php y creo que con esto ha dejado de darme error, pero ahora no sé cómo hacerlo para redireccionar, porque la forma como llamo a la página de inicio es la siguiente, y no sé cómo diferenciarlo por idiomas:

$this->load->view('index', $data);

Así es como diferencio los idiomas por URL, no sé si os puede servir:

ES: http://www.dominio.com
EN: http://www.dominio.com/index.php/en/home/index/

Otra cosa que he probado es modificando el archivo system\application\libraries\langsystem.php. Aquí tengo este código que me permite cambiar el idioma por defecto.


if($CI->uri->segment(1))
   $this->lang_code = $this->get_language($CI->uri->segment(1));
else
   $this->lang_code = 'es';


He intentado hacer esto


if($CI->uri->segment(1))
   $this->lang_code = $this->get_language($CI->uri->segment(1));
else {
   if ($this->agent->accept_lang('en')){
      $this->lang_code = 'en';
   }else{               
      $this->lang_code = 'es';
   }
}


pero me da error otra vez  :-\


KateLibby

Haciéndolo como propuso madpitbull_99 y redireccionándolo, por ejemplo, a www.google.es me funciona. Sin embargo, si lo redirecciono tal cual pero a la URL de mi web, el navegador me da el error de que no se está redireccionando correctamente. ¿Alguna idea?

Esto es lo que he añadido al controlador home.php



$this->load->library('user_agent');
           
if ($this->agent->accept_lang('en'))
{
    redirect("http://www.midominio.com");



EFEX

Cita de: KateLibby en 23 Noviembre 2011, 10:29 AM
Haciéndolo como propuso madpitbull_99 y redireccionándolo, por ejemplo, a www.google.es me funciona. Sin embargo, si lo redirecciono tal cual pero a la URL de mi web, el navegador me da el error de que no se está redireccionando correctamente. ¿Alguna idea?

Creo que no se añade parametro, es como utilizar base_url(), sino corrijanme.

Código (php) [Seleccionar]

$this->load->library('user_agent');
if ($this->agent->accept_lang('en'))
{
    redirect();
}
GITHUB 

KateLibby

 >:( Nada, tampoco me funciona así.

También intenté hacer una chapuza. Me fui a views/index.php y allí redireccioné hacia el idioma, de esta manera:

<script>
location.href="URL";
</script>


El resultado que obtuve es que parecía que hacía un bucle redireccionándose todo el rato.