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

miércoles, 26 de octubre de 2011

Crear Url dependiendo del lenguaje


Para crear una url dependiendo del idioma, tendríamos que crear MY_url_helper.php, donde extendemos la funcion site_url(), para que cree las url dependiendo del lenguaje. Acepta ahora un segundo parámetro con la abreviación del lenguaje que queremos que cree la url, si vamos a cambiar el lenguaje hay que pone ajuro el lenguaje, pero si la url debe estar en el mismo lenguaje la va a crear.

 function site_url($uri = '', $lang = '')
 {
  $CI =& get_instance();
  $config =& get_config();
  if(!array_key_exists($lang,$config['languages']))
   $lang=array_search($config['language'],$config['languages']);
  return $CI->config->site_url()."/$lang/".trim($uri,"/").$CI->config->item('url_suffix');
 }


Esto es continuacion del articulo: http://sosinformatico.blogspot.com/2011/10/codeigniter-multi-lenguaje-web-por-urls.html

Codeigniter Multilenguaje web, por URLS

Este tutorial se lo voy a dedicar a explicar como se hace para crear un sistema Multilenguaje en Codeigniter, en internet hay varios tutoriales de como hacer esto en nuestro idioma, pero lo hacen usando cookies, y aunque no están mal, no permiten a un buscador almacenar correctamente el contenido de nuestra pagina en los diferentes lenguajes y así atraer a más gente a nuestra pagina Web.
Codeigniter Multilenguaje

Aquí les dejo un articulo sobre SEO y el MULTILINGUAL SEO, por si se quieren documentar un poco más: http://www.searchenginejournal.com/multilingual-seo/19903/

Ahora bien, para empezar deben conocer primero como se trabaja con lenguajes de manera básica con Codeigniter, aqui les dejo un pequeño tutorial que hice: http://sosinformatico.blogspot.com/2011/10/codeigniter-language-class.html

Para hacer que codeigniter sea multilenguaje hay dos maneras que yo conozco, una es a través de hooks y otra extendiendo la clase que lang.php en la carpeta core de nuestra aplicación. En este tutorial voy a explicar la ultima forma, y despues publicara otro con la otra forma.

Configurando el archivo Routes.php

En application/config/routex.php vamos a agregar dos lineas:


$route['(\w{2})/(.*)'] = '$2';

$route['(\w{2})'] = $route['default_controller'];


En el primer array se establece que cualquier ruta que tenga dos caracteres y una barra inclidada y algo mas, sera rederigida a ese algo más, y al segunda estable que cualquier ruta con dos caracteres llamara al controlador por defecto.

Configurando el archivo Config.php

En application/config/config.php, cerca de la configuración de lenguaje vamos a agregar:


$config['languages'] = array("es" => "espanol", "en" => "english");



$config['redirect_urls']=false;


Esto es para definir la configuración de nuestro sistema de lenguajes, y que después solo deba ser modificada desde aquí, si queremos agregar un lenguaje aparte o cualquier cosa. Ademas tambien nos permite definir si queremos usar la redirection de url o no, que sirve para que si alguien entre a "hhttp://nuestrositio.com/" lo redirige automaticamente o no a "hhttp://nuestrositio.com/xx" las dos x significan el idioma que tengamos por defecto.

Extendiendo lang.php

Para extender esta libreria del nucleo de Codeigniter, debemos crear dentro de la carpeta application/core  un archivo que debe empezar con la variable definida $config['subclass_prefix'] en el config.php (por defecto es MY_) y luego lang.php, en mi caso el nombre es MY_Lang.php, y dentro colocamos el siguiente codigo:

<?php (defined('BASEPATH')) OR exit('No direct script access allowed');

class MY_Lang extends CI_Lang
{
 function __construct()
 {
  parent::__construct();  
  $config =& get_config();
  if(isset($config['languages']) && isset($config['redirect_urls']))
  {
   global $URI, $CFG, $IN;
   //var_dump($URI);
   $lang = (isset($URI->segments['1']))?$URI->segments['1']:'';
   $uri=$URI->segments;
   if(strlen($lang) == 2 && array_key_exists($lang,$config['languages']) == true)
   {
    $config['language']=$config['languages'][$lang];
   }
   elseif($config['redirect_urls'] == true || strlen($lang) == 2 && array_key_exists($lang,$config['languages']) == false)
   {
    $url=$config['base_url'];
    $url.=(empty($config['index_page']))?'':$config['index_page'].'/';
    $url.=array_search($config['language'],$config['languages']).'/';
    if(strlen($lang)==2)
    {
     array_shift($uri);
     $url.=implode('/',$uri);
    }else
    {
     $url.=implode('/',$uri);
    }
    header("location: $url");
   }
  }
 }
}


Este código es el que va a dar la funcionalidad de muli lenguaje, es bastante sencillo, lo que hace es comprueba cuales son los primeros caracteres en la url, comprueba que estén definidos en la configuración y si es así cambia al idioma correspondiente, sino redirige al idioma por defecto. SI la variable redirect:url esta en true, el sistema comprobara que la url empieza con los dos caracteres del idioma por defecto y si no es así lo redirige a la url del idioma por defecto, si esta en false esta variable pues no hace nada y deja el idioma por defecto.

Probando el sistema Multilenguaje.

Esto no es un sistema automatizado que va a traducir toda tu aplicación, lo que hace es modificar solamente el idioma que usa la aplicación dependiendo de la url, para verlo funcionando debemos crear una aplicación que tenga varias idiomas ya definidos y esto se encargara del resto.

De todas maneras aquí les dejo una aplicación con el welcome_message en español y ingles, y los links para cambiar de idioma. Y así la prueban y comentan como funciona.