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