Pazar, Mayıs 01, 2011

php ile gettext olmadan çoklu dil özelliği

po dosyalarını kullanarak ve cach destekli çoklu dil sistemi

po dosyalarını pars etmek için php poparser kütüphanesini kullanacağız.



include_once 'POParser.php';
$GLOBALS['LANGUAGE_CODE'] = 'tr';
$GLOBALS['LOCALE_PATH'] = 'locale';
$GLOBALS['CACH_PATH'] = 'cach';
function encode_lang_key($str) {  
    return base64_encode(pack('H*',sha1($str)));
}
if(is_file(dirname(__FILE__).'/cache/lang_'.$GLOBALS['LANGUAGE_CODE'].'.cache')){
$content = file_get_contents(dirname(__FILE__).'/cache/lang_'.$GLOBALS['LANGUAGE_CODE'].'.cache');
$GLOBALS['LANG'] = unserialize($content);
}else {
$langFile = sprintf('%s/%s/LC_MESSAGES/messages.po',$GLOBALS['LOCALE_PATH'],$GLOBALS['LANGUAGE_CODE']);
$pp = new POParser();
$GLOBALS['LANG'] = array();
    $res = $pp->parse($langFile);
 
    foreach ($res[1] as $entry) {      
        if (isset($entry['msgid'])){
            $GLOBALS['LANG'][encode_lang_key($entry['msgid'])] = $entry;
        }    
    } file_put_contents(APPLICATION_PATH.'/cache/lang_'.$GLOBALS['LANGUAGE_CODE'].'.cache', serialize($GLOBALS['LANG']));
}
function my_gettext($message) {
$lang_key = encode_lang_key($message);
$retVal = $message;
if (isset($GLOBALS['LANG'][$lang_key])){
    $retVal = $GLOBALS['LANG'][$lang_key]['msgstr'];
    }
 
    return $retVal;
}


// Örnek kullanım

echo my_gettext("Merhaba Dünya");

Hiç yorum yok: