Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: KateLibby en 17 Noviembre 2011, 15:25 pm



Título: Capturar idioma navegador (codeigniter)
Publicado por: KateLibby en 17 Noviembre 2011, 15:25 pm
¿Sabéis alguna forma de hacer esto mismo pero con el framework Codeigniter? Si lo pongo tal cual me da error.

Código:
$_SERVER['HTTP_ACCEPT_LANGUAGE']

Gracias


Título: Re: Capturar idioma navegador (codeigniter)
Publicado por: madpitbull_99 en 17 Noviembre 2011, 16:12 pm
Puedes usar la clase UserAgent (http://codeigniter.com/user_guide/libraries/user_agent.html).

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

Código
  1. if ($this->agent->accept_lang('en'))
  2. {
  3.    echo 'You accept English!';
  4. }



Título: Re: Capturar idioma navegador (codeigniter)
Publicado por: KateLibby en 17 Noviembre 2011, 17:42 pm
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.


Título: Re: Capturar idioma navegador (codeigniter)
Publicado por: madpitbull_99 en 17 Noviembre 2011, 18:03 pm
Te puede servir perfectamente para lo que tu quieres.

En el constructor del controlador, lo usas así:

Código
  1. if ($this->agent->accept_lang('en'))
  2. {
  3.    redirect('site/english');
  4. }else if ($this->agent->accept_lang('es')
  5. {
  6.    redirect('site/spanish');
  7. }


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



Título: Re: Capturar idioma navegador (codeigniter)
Publicado por: KateLibby en 22 Noviembre 2011, 12:13 pm
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:

Código:
$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.

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

He intentado hacer esto

Código:
			
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  :-\



Título: Re: Capturar idioma navegador (codeigniter)
Publicado por: 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?

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


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



Título: Re: Capturar idioma navegador (codeigniter)
Publicado por: EFEX en 23 Noviembre 2011, 13:44 pm
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
  1. $this->load->library('user_agent');
  2. if ($this->agent->accept_lang('en'))
  3. {
  4.    redirect();
  5. }
  6.  


Título: Re: Capturar idioma navegador (codeigniter)
Publicado por: KateLibby en 24 Noviembre 2011, 09:14 am
 >:( 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:

Código:
<script>
location.href="URL";
</script>

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