Url Multi-idioma, Controladores Multi-idioma (Multilenguaje)

93 views
Skip to first unread message

Daniel Fernández, Visualcode.es

unread,
Aug 10, 2015, 8:23:43 AM8/10/15
to CodeIgniter-spanish
Hola.

Estoy desarrolando una web, tengo la libreria i18n instalada y funcionando perfectamente. Pero me gustaria poder traducir las url segun los idiomas, por ejemplo:

www.dominio.com/usuarios
www.dominio.com/users

www.dominio.com/recuperar_clave
www.dominio.com/recover_password

Sabeis como puedo hacer esto? traducir el nombre del controlador y sus funciones? o redireccionar de alguna forma per que no cambie la url que yo ponga... no se, alguna sugerencia?

Gracias.

Josepzin Ungoliante

unread,
Aug 10, 2015, 4:47:55 PM8/10/15
to CodeIgniter-spanish
Yo lo hago a través del routers.php, por ejemplo:

// GALLERIES
$route['(\w{2})/'.URL_GALLERIES_INDEX.'(.*)'] = 'galleries/index_old/$1';
$route['(\w{2})/'.URL_GALLERIES_VIEW.'/(.*)/(:num)'] = 'galleries/view/$3';

El controlador es el mismo, pero la constante cambia de valor segun el idioma que esté activo.

Estos valores los asigno en constants.php asi:

// tomar el idioma de la URL
$lang = array_shift(preg_split('/\//', trim($_SERVER['SCRIPT_URL'], '/')));
/*
switch ($lang)
{
case 'en':
define('URL_ABOUT', 'about);
define('URL_GALLERIES_INDEX', ...

Daniel Fernández, Visualcode.es

unread,
Aug 11, 2015, 3:10:03 AM8/11/15
to CodeIgniter-spanish
Yo habia pensado en hacer un controlador por cada idioma, todos esos controladores heredan de un controlador padre. Y en este controlador padre es donde esta el codigo, en los controladores hijos solo los metodos en su idioma que llaman al metodo padre... creo que me parece mas simple, no se...

Daniel Fernández, Visualcode.es

unread,
Aug 11, 2015, 4:53:01 AM8/11/15
to CodeIgniter-spanish
Solucionado de este modo:

Archivo Routes---------------------

//MULTI IDIOMA
$route['default_controller'] = "Page";
$route['^(es|en)/(.+)$'] = "page/$2";

Controlador Page-----------------

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

class Page extends MY_Controller {

function __construct() {
  parent::__construct();
  $this->load->library('../controllers/fn');
}
public function index() {
echo 'Pagina de inicio';
}
/**
* RECUPERAR CLAVE CLIENTE
*/
public function recuperar_clave() {
echo $this->fn->recuperar_clave();
}
public function recover_password() {
echo $this->fn->recuperar_clave();
}
/**
* FIN RECUPERAR CLAVE CLIENTE
*/
}

Controlador Fn (donde va el realidad el codigo de la web)-------------------------------

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

class Fn {    
    public function recuperar_clave() {
return 'Hola';
}
}



De este modo puedo poner el nombre de los metodos en la web segun el archivo de idioma, siempre llamara al controlador page que redireccionara al controlador Fn. La url queda como yo quiero sin la palabra Page y cambiando de idioma.

El lunes, 10 de agosto de 2015, 14:23:43 (UTC+2), Daniel Fernández, Visualcode.es escribió:
Reply all
Reply to author
Forward
0 new messages