Nucleus

NP_Multilingual

2007年11月18日

多国語表示プラグインがどうやら出来たみたいだ。50行に満たない長さだけれど、予定していた機能は一通り実装している。

始めは、どのような言語を使うかというところについて、プラグインオプションで設定できるようにしようかと考えたけれど、PHPファイルを直接書き換えて設定するようにした。自分自身で使う場合は日本語(ja)と英語(en)だけだし(デフォルトの状態)、他の人が使う場合でもインストールの際に一度きり設定するだけだろうから、これでよいだろう。

とりあえずこのブログにインストールして、少し使用した後に、公式サイトのWikiに上げる予定。

<?php 
class NP_Multilingual extends NucleusPlugin { 
    function getName() { return 'NP_Multilingual'; }
    function getMinNucleusVersion() { return 220; }
    function getAuthor()  { return 'Katsumi'; }
    function getVersion() { return '0.1'; }
    function getURL() {return 'http://japan.nucleuscms.org/wiki/plugins:authors:katsumi';}
    function getDescription() { return $this->getName().' plugin'; } 
    function supportsFeature($what) { return ($what=='SqlTablePrefix')?1:0; }
    function getEventList() { return array('PreItem','PostAuthentication'); }
    var $lang='';
    var $langs=array('ja'=>'','en'=>'english.php');
    var $deflang='ja';
    function init() {
        if ( !($lang=@$_GET['lang']) ) $lang=$this->deflang;
        if (!array_key_exists($lang,$this->langs)) $lang=$this->deflang; // sanitize $lang
        $this->lang=$lang;
    }
    function event_PreItem(&$data){
        $item=&$data['item'];
        $this->replace($item->title);
        $this->replace($item->body);
        $this->replace($item->more);
    }
    function replace(&$data){
        $lang=$this->lang;
        $search=$replace=array();
        foreach($this->langs as $key=>$value){
            $search[]="!<$key>([\\s\\S]*)</$key>!";
            if ($key==$lang) $replace[]='$1';
            else $replace[]='';
        }
        $data=preg_replace($search,$replace,$data);
    }
    function event_PostAuthentication(){
        global $DIR_LANG;
        $lang=$this->lang;
        if ($lang==$this->deflang) return;
        if ( !($langfile=$this->langs[$lang]) ) return;
        include($DIR_LANG.$langfile);
    }
}
?>

コメント

コメントはありません

コメント送信