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.