CakePHP projekt lokalizálás
cakephp, fejlesztés, hogyan
Az 1.2-es CakePHP sok mindenben megkönnyíti a dolgunkat, köztük a projektünk nemzetközivé tételében is. Ha több nyelven is elérhetővé akarjuk tenni a webalkalmazásunkat akkor a következőket kell tennünk.
Az AppController osztály
Feltételezve, hogy a teljes alkalmazást lokalizálni akarjuk létre kell hoznunk a /app/app_controller.php fájlt ha esetleg korábban még nem tettük volna meg.
<?php
uses('L10n');
class AppController extends Controller {
var $helpers = array('Html', 'Form', 'Javascript', 'Ajax');
function beforeFilter(){
//lokalizálás
$this->L10n = new L10n();
$this->L10n->get('hu');
Configure::write('Config.language', 'hu');
}
}
?>
Az első sorban a vezérlő tudtára adjuk, hogy használja az L10n osztályt. Ezután mivel azt szeretnénk, hogy minden vezérlőbeli függvényben elérhető legyen a szolgáltatást a beforeFilter() függvényben hajtjuk végre a továbbiakat.
Létrehozunk egy új L10n objektumot, beállítjuk számára a magyar nyelvet, aztán habár enélkül is remekül el lehet lenni a config értékek közé is betesszük a kiválasztott nyelvet.
default.po
Ezek után létre kell hoznunk a /app/locale/hun/LC_MESSAGES könyvtárat, mivel a CakePHP itt fogja majd keresni a magyar nyelvhez tartozó default.po fájlt.
Ezután mondjuk a Poedittel létrehozhatjuk az új katalógus fájlt. Az általános információknál érdemes a nyelvnél beállítani a magyart, a karakterkészleteknél pedig az utf8-at.
Az elérési útvonalaknál két választásunk van. Vagy megadjuk a projekt gyökérkönyvtárát, vagy korlátozhatjuk magunkat a /app könyvtárra is. Mivel többnyire úgy sem használom a CakePHP alapértelmezett sztringjeit a magam részéről ide általában az /app könyvtár elérési útját állítom be, nem a gyökérét.
A kulcsszavaknál meg kell adnunk a __ függvénynevet, hogy a Poedit tudja miket kell kigyűjtögetnie.
Ezután arról kell gondoskodnunk, hogy a Poedit a .ctp fájlokat is úgy kezelje mint a .php fájlokat. Ehhez a Poedit Fájl / Beállítások / Elemzők menüben ki kell választanunk a PHP-t és eltalálni a Szerkesztés gombot. Itt a kiterjesztéseket át kell írnunk *.php;*.ctp-re, az Elemző program parancsának a végére pedig be kell pötyögnünk, hogy --language=php.

Ezután el kell mentenünk a katalógust fájlt a fent létrehozott könyvtárba. Ha a katalógust szinkronizáljuk a forrásokkal akkor már szépen meg is kapunk minden lokalizálható sztringet, lehet fordítani.
Lokalizálásra jelölés
Erre többféle lehetőségünk is van.
Az első és legtisztább a __() függvény meghívása.
<?php __('Vegamania'); ?>
Ez egyszerűen kiírja a megadott szöveg kiválasztott locale szerinti változatát, vagy ha az még nem létezik akkor kiírja a szöveget.
Ha vezérlőben akarjuk használni, akkor a második elhagyható paraméternek true-t kell adnunk, hogy ne kiírás történjen, hanem csak visszatérési értékként adódjon át a lokalizált szöveg.
$this->pageTitle = __('Vegamania', true) . ' ' . __('Slogan', true);
Ha szeretnénk a szövegben változókat is használni akkor a __() függvény hívást össze kell drótoznunk a printf() függvénnyel.
<?php
printf(__('Planned start: %s', true), $starDate);
?>
Végül pedig a helperekben is használhatjuk a lokalizált szövegeket.
print $html->link(__('Send a receipt', true), array(
'controller'=> 'recipesuggestions',
'action'=>'new'));
Ez a bejegyzés rrd billentyűzetéből potyogott ki 2008 szeptember 30. napján 12:00:59-kor. Eddig 2,152 olvasást ért meg. A visszajelzéseket nyomonkövetheted ezzel az RSS feed-el. Véleményt nyilváníthatsz, vagy trackbackolhatsz a saját oldaladon.
JólMegMondjad!
1 vélemény
-
firith
2009 július 28. 11:42:58Szia!
Drupalból tudom, hogy a .po fájlokban lehet többesszámot is használni, erre tudnál mutatni pár példát? Azt látom, hogy __n() függvényt kell használnom, de nem tiszta, hogy hogyan.



