Hola, recientemente he estado construyendo un sitio que pretendo sea de dos lenguajes (por el momento) mi página de inicio muy bien, le puse dos banderitas para los lenguajes y los textos provenientes del "languaje > carpeta_lenguaje >archivo_lang.php" funcionan perfectamente.
El problema viene cuando elijo el segundo lenguaje, en este caso inglés, la página de inicio carga perfecto, y cuando me voy aa un enlace cualquiera, todo regresa a español, si en la URL manualmente cambio "es" por "en" sí se ve bien, pero sé que tengo un problema con el ruteo solo que no consigo encontrarlo, llevo ya dos días con este detalle y nada que lo soluciono, por eso me animé a pedir ayuda.
Mi portal funciona de la siguiente forma:
En el archivo ROUTES, agregué estas dos reglas (que si bien no las entiendo perfectamente, son tal y como las leí en un manual que seguí para hacer lo de multilenguaje)
Código PHP:
$route['(\w{2})/(.*)'] = '$2';
$route['(\w{2})'] = $route['default_controller'];
Después en el CONFIG agregué esto:
Código PHP:
$config['languages'] = array("es" => "espanol", "en" => "english");
$config['redirect_urls']=false;
Extendí la clase del core LANG dejando en mi archivo "MY_Lang.php" esto:
Código PHP:
<?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");
}
}
}
}
Con esto y mis dos carpetas de lenguaje con sus correspondientes archivos de cadenas todo funciona perfecto, pero si hago un enlace a otra parte del portal, independiente mente de usar "base_url()" o al directorio directo "Directorio/funcion" arma las urls de forma que el lenguaje "se le olvida" y me deja todo en el lenguaje por defecto, alguién me podría ayudar a ver mi error? tal vez es la forma en la que declaro las urls o a donde pongo los hrefs, pero ya estoy desesperado, ayuda por favor.
Saludos y de ante mano, mil gracias!!