Implementar la función multiidioma en CodeIgniter

La característica multiidioma es muy necesaria en casi todas las aplicaciones web modernas. Esta función se utiliza para internacionalizar las aplicaciones. En este tutorial, discutiremos cómo implementar la característica multiidioma en el framework CodeIgniter. Utilizando la clase Language de CodeIgniter, podrás hacer de forma sencilla que tu sitio web sea multiidioma. La clase Language de CodeIgniter cuenta con ciertas funciones para recuperar archivos de lenguaje y líneas de texto. ¿Empezamos? ¡Vamos allá!

Idioma por defecto del sitio web

Abre el fichero application/config/config.php y define el idioma por defecto del sitio web.

$config['language']  = 'english';

Creando los ficheros de idiomas

Crea múltiples ficheros de idiomas e inserta dichas líneas en el directorio application/language con distintos subdirectorios para cada idioma (por ejemplo, francés, alemán...)

Los ficheros de idioma deben contener el sufijo lang. Por ejemplo, si quieres crear un fichero que contenga las traducciones de los mensajes de la web, el nombre del fichero debería ser algo así como messagelang.php.

La estructura para el fichero de idioma, debería quedar tal que así:

application
> language
>> english
>>> message_lang.php
>>> ...
>> french
>>> message_lang.php
>>> ...
>> german
>>> message_lang.php
>>> …

Dentro del archivo de idioma (message_lang.php), debes asignar cada línea de texto al array $lang.

$lang['language_key'] = 'The actual message to be shown';

Aquí tienes un ejemplo del contenido de los diversos ficheros de idiomas.

El archivo english/message_lang.php debería lucir tal que así:

<?php
$lang['welcome_message'] = 'Welcome to Programacion.net';

El archivo french/message_lang.php debería lucir tal que así:

<?php
$lang['welcome_message'] = 'Bienvenue à Programacion.net';

El archivo german/message_lang.php debería lucir tal que así:

<?php
$lang['welcome_message'] = 'Willkommen in Programacion.net';

Cargando los archivos de idiomas

Para extraer una línea de un fichero de idioma concreto, debes cargar el fichero de idioma primero. Tenemos dos opciones para cargar el fichero de idiomas:

Mediante el controlador

Dentro de la función __construct() del controlador, escribe el siguiente código.

$this->lang->load('message','english');

Si escoges esta opción, necesitas cargar el fichero de idiomas en todo el controlador de tu aplicación.

Mediante hooks

Para utilizar la opción de los hooks, debes habilitarlos a través del fichero application/config/config.php.

$config['enable_hooks'] = TRUE;

Abre el fichero application/config/hooks.php y define un hook.

$hook['post_controller_constructor'] = array(
    'class'    => 'LanguageLoader',
    'function' => 'initialize',
    'filename' => 'LanguageLoader.php',
    'filepath' => 'hooks'
);

Crea una clase llamada LanguageLoader en el fichero LanguageLoader.php dentro del directorio application/hooks/. El fichero LanguageLoader.php debe contener este código:

<?php
class LanguageLoader
{
    function initialize() {
        $ci =& get_instance();
        $ci->load->helper('language');
        $ci->lang->load('message','english');
    }
}

Extrayendo una línea de texto

Una vez cargado el fichero de idioma, puedes extraer una línea de texto mediante el siguiente código.

$this->lang->line('welcome_message');

Cambiar entre idiomas

Vamos a ver cómo alternar entre distintos idiomas y hacer que tu web sea multiidioma. Utilizaremos las sesiones para almacenar el idioma escogido del usuario y cargar el respectivo idioma.

Antes de empezar, abre el fichero application/config/autoload.phpy carga la librería SESSION y el helper URL.

$autoload['libraries'] = array('session');
$autoload['helper'] = array('url');

Crearemos el controlador LanguageSwitcher para gestionar el cambio de idiomas. El fichero application/controllers/LanguageSwitcher.php contendrá el siguiente código.

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class LanguageSwitcher extends CI_Controller
{
    public function __construct() {
        parent::__construct();     
    }
 
    function switchLang($language = "") {
        
        $language = ($language != "") ? $language : "english";
        $this->session->set_userdata('site_lang', $language);
        
        redirect($_SERVER['HTTP_REFERER']);
        
    }
}

Abre el fichero application/hooks/LanguageLoader.php y reemplaza el código con este que te proporcionamos a continuación:

<?php
class LanguageLoader
{
    function initialize() {
        $ci =& get_instance();
        $ci->load->helper('language');
        $siteLang = $ci->session->userdata('site_lang');
        if ($siteLang) {
            $ci->lang->load('message',$siteLang);
        } else {
            $ci->lang->load('message','english');
        }
    }
}

Ahora debemos mostrar los idiomas en un desplegable en la vista. Cuando se cambie la opción del idioma, hay que llamar a la función switchLang() del controlador LanguageSwitcher. La función switchLang() define el idioma de la web en una sesión basándose en el idioma solicitado.

<select onchange="javascript:window.location.href='<?php echo base_url(); ?>LanguageSwitcher/switchLang/'+this.value;">
    <option value="english" <?php if($this->session->userdata('site_lang') == 'english') echo 'selected="selected"'; ?>>English</option>
    <option value="french" <?php if($this->session->userdata('site_lang') == 'french') echo 'selected="selected"'; ?>>French</option>
    <option value="german" <?php if($this->session->userdata('site_lang') == 'german') echo 'selected="selected"'; ?>>German</option>   
</select>
<p><?php echo $this->lang->line('welcome_message'); ?></p>

También, debemos modificar nuestro fichero .htaccess para que todo esto funcione:

RewriteEngine on
RewriteCond $1 !^(index.php)
RewriteRule ^(.*)$ /codeigniter/index.php/$1 [L]

Fuente: codexworld.com

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP