CodeIgniter gettext

Rengetegféleképpen hozhatunk létre többnyelvű weboldalakat, most azt mutatom be hogyan hozhatunk létre több nyelvű oldalt CodeIgniter keretrendszerben gettext használatával.
Rendszerkövetelmények: szükségünk van a PHP gettext moduljára. Következő lépés, hogy létrehozunk egy osztályt mely a nyelvválasztást fogja kezelni.

Ellenőrizzük hogy rendelkezünk-e a gettext-el hozzunk létre egy .php file-t a következő tartalommal:
<?php

phpinfo();


Keressünk rá a gettext szövegre, ha találunk akkor minden rendben, folytathatjuk a munkát.

Hozzuk létre az osztályunkat, application/libraries/gettext.php:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * Gettext class
 */
class Gettext {
 function __construct() {
 $core =& get_instance();
 $sLocale = $core->config->item('locale');

 putenv("LC_ALL=$sLocale");
 setlocale(LC_ALL, $sLocale);
 bindtextdomain("messages", LANG_PATH);
 textdomain("messages");
 }
}


A config-ban található locale értéke pedig:
$config['locale'] = 'hu_HU.UTF8';


A LANG_PATH konstans értéke:
define('LANG_PATH', getcwd().'/application/language/locale');


Azért magyar a locale mivel az alkalmazás eredeti nyelve nálam angol volt.

A view-ban az alapértelmezett gettext kiiratást használtam:
<?php echo _('User'); ?>


A nyelvi file-ok a következő útvonalon találhatóak application/language/locale/hu_HU/LC_MESSAGES/ ebben a mappában található 2 darab file, a messages.po és a message.mo.

Fordítások létrehozásához töltsük le a poedit nevű ingyenes programot, ez a program képes megnyitni .php file-jainkat és megkeresni bennük a fordítható szövegeket, tehát amik _('') módszerrel vannak kiíratva. Miután megadtuk a poeditnek, hogy hol találja az alkalmazásunkat, frissítsük a katalógust és miután feldolgozta a file-okat máris láthatjuk a lefordított valamint a lefordításra váró szövegeket. Mikor elmentjük a katalógust a poedit automatikusan létrehozza a messages.mo file-t, ez töltődik majd be  a memóriába.

Annyit kell tennünk, hogy a létrehozott osztályt betöltjük automatikusan és az beállítja a szükséges nyelvet alkalmazásunk számára. Ha azt szeretnénk, hogy ne config-ból legyen beállítva a nyelv, hanem szeretnénk mondjuk munkamenetből állítani, akkor hozzunk létre egy új metódust a gettext osztályban ami egy paramétert kap, az aktuális locale-t.