CakePHP projekt lokalizálás

, ,

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.

Poedit ctp as 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'));
Share
Mi az az RSS és mi az a PayPal?

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.

Ugrás fel

JólMegMondjad!

1 vélemény

  1. firith
    2009 július 28. 11:42:58

    Szia!

    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.

Switch to our mobile site