Traducir una web en CodeIgniter a varios idiomas

Descripción de cómo hacer una web multiidioma con el framework CodeIgniter utilizando las funciones gettext de PHP

Estructura de carpetas del sitio

  raíz
    - application
      - helpers
        - idioma_helper.php
      - libraries
        - Idioma.php
    - locale
      - init.sh
      - addlang.sh
      - prepare.sh
      - compile.sh
      - ca_ES
        - LC_MESSAGES
      - es_ES
        - LC_MESSAGES
      - en_US
        - LC_MESSAGES

Alternativas ofrecidas

Helper idiomaLibrary Idioma
init_idioma()Idioma::init()Carga las traducciones del idioma actual
get_idioma()Idioma::get()Obtiene el código del idioma actual
set_idioma(lang)Idioma::set(lang)Cambia el idioma actual

Inicialización y cambio de idioma

La inicialización del idioma se debería realizar en el constructor de cada controlador

Para cambiar de idioma se puede realizar el siguiente método lang dentro del controlador

class Welcome extends CI_Controller {

  public function __construct() {
    parent::__construct();
    init_idioma();
  }

  ...

  public function lang($lang) {
    set_idioma($lang);
    redirect($_SERVER['HTTP_REFERER']);
  }

  ...

}

El código HTML para cambiar de idioma:

<ul>
  <li><a href="<?=site_url('welcome/lang/ca')?>">Català</a></li>
  <li><a href="<?=site_url('welcome/lang/es')?>">Español</a></li>
  <li><a href="<?=site_url('welcome/lang/en')?>">English</a></li>
</ul>

Realizar la traducción

Para ello usaremos las funciones gettext y el programa Poedit

Cómo traducir en el código PHP

Hay que elegir cual será el idioma base. Cada texto a traducir en una página PHP hay que ponerlo dentro de una llamada a una función gettext.
Por ejemplo: <?= _('Nombre y apellidos') >

Sólo la primera vez

  1. Recopilar todos los textos a traducir de los php ubicados en application/controllers y en application/views.
    ./init.sh
    Esto creará los archivos phplist.tmp y messages.pot
  2. Añadir los idiomas a traducir.
    ./addlang.sh ca_ES
    ./addlang.sh en_US

Cada vez que se añadan nuevos textos de traducción

  1. Actualizar el fichero de traducciones
    ./prepare.sh
  2. Traducir los ficheros ca_ES.po y en_US.po abriéndolos con el programa Poedit
  3. Compilar la traducción
    ./compile.sh
    Esto creará los ficheros locale/ca_ES/LC_MESSAGES/messages.mo
    y locale/en_US/LC_MESSAGES/messages.mo

Comentarios

Proinf.net, ©2003-2019 ci 3.1.10 (CC) Esta obra está bajo una licencia de Creative Commons Este software está sujeto a la CC-GNU GPL