Pasos para crear una web multilenguaje (dos o más idiomas) con urls amigables del tipo:

miweb.com/en/about
miweb.com/es/about
miweb.com/de/about

1. Editamos el archivo application/config/config y dejamos el valor de la variable index_page vacio (por defecto viene con valor de «index.php»):

$config['index_page'] = ''; 

2. Descargar la libreria i18n.

3. Pegamos los 2 archivos (MY_Lang.php, MY_Config.php) dentro de la carpeta: application/core.

4. Abrimos el archivo MY_Lang.php y editamos la variable $languages y editamos el array con los idiomas que vayamos a utilizar, por ejemplo:

var $languages = array(
    'en' => 'english',
    'es' => 'spanish',
    'de' => 'deutsch'
);

5. Configuramos las rutas en el archivo application/config/routes.php:

// Ejemplo para 3 idiomas (ampliable al número de idiomas que utilices). Por ejemplo '/en/about' -> usaria el controlador 'about'
$route['^(en|es|de)/(.+)$'] = "$2";

// '/en', '/es', '/fr' URIs -> controlador usado por defecto
$route['^(en|es|de)$'] = $route['default_controller'];

6. Creamos los archivos php donde almacenaremos las variables con los textos de cada idioma. Estos archivos tienen que cumplir 2 reglas:

– El nombre de los archivos php deben finalizar con el nombre «_lang«.
– Deben guardarse en la carpeta: application/language/[idioma]/ de la siguiente forma:

application/language/english/generales_lang.php
application/language/spanish/generales_lang.php
application/language/deutsch/generales_lang.php

Un ejemplo de archivo, en este caso el archivo de idioma español: spanish/generales_lang.php:

// Textos Globales
$lang['global.titulo'] = "Himno de León";
$lang['global.descripcion'] = "Sin León no hubiera España, que antes que Castilla leyes, concilios, fueros y reyes, dieron prestigio a León.";
// etc...

7. En el archivo del controlador incluimos las librerias necesarias. Por ejemplo:

public function __construct() {
    parent:: __construct();
    $this->load->helper('language'); // cargo la libreria language (core/MY_Lang.php & core/MY_Config.php)
    $this->lang->load('generales'); // cargo los archivos del lenguaje creados anteriormente (en mi caso: generales_lang.php)
    $this->load->helper("url");
}

8. Ya por último solo nos queda ver su modo de uso. En este caso dentro de un archivo de vista:

<p>Ejemplo de texto: <?=lang('global.titulo')?></p>

<p>Ejemplo de enlace: <?=anchor('welcome', lang('global.titulo'))?></p>

Para obtener el codigo iso del idioma activo se utiliza la variable:

echo $this->lang->lang(); // Ej: "es"

Otro ejemplo de navegación entre idiomas:

<ul>
    <li<?php if($this->lang->lang() == 'en') { echo ' class="active"'; } ?>><?php echo anchor($this->lang->switch_uri('en'),'EN'); ?></li>
    <li<?php if($this->lang->lang() == 'es') { echo ' class="active"'; } ?>><?php echo anchor($this->lang->switch_uri('es'),'ES'); ?></li>
    <li<?php if($this->lang->lang() == 'de') { echo ' class="active"'; } ?>><?php echo anchor($this->lang->switch_uri('de'),'DE'); ?></li>
</ul>

Agradezco tu comentario 🤘