<?php
namespace imcat;

// basLang多语言类
class basLang{    
    
    static 
$_CACHES_LG = array();//将读取过的缓存暂存可重用

    // ('fsystem'), ('cfglibs.upload');
    
static function ucfg($file$key=0){
        if(
strpos($file,'.')){
            
$mk explode(".",$file);
            
$file $mk[0];
            
$key $mk[1];
        } 
        
$re self::getCfgs($key$file'ucfgs');
        return 
$re;
    }

    
// {basLang::show(core.view_times,$click)}
    // {basLang::show(core.sys_name)}
    
static function show($mk$val=''$dir='kvphp'){
        
$mk str_replace("'",'',$mk);
        if(!
strpos($mk,'.')) $mk "core.$mk";
        
$arr explode('.',$mk); 
        
$re self::getCfgs($arr[1], $arr[0], $dir);
        if(
strlen($val)>0){
            
$re str_replace('{val}',$val,$re);
        }
        if(
strpos($re,'{val}')){
            
$re str_replace('{val}','',$re);
        } 
        return 
$re;
    }
    
    
// 多语言...
    
static function getCfgs($key$mod='core'$dir='kvphp'){
        global 
$_cbase;
        
$lang $_cbase['sys']['lang'];
        if(isset(
self::$_CACHES_LG[$mod])){
            
$cfgs self::$_CACHES_LG[$mod];
        }elseif(
file_exists($_fex=DIR_ROOT."/extra/$dir/$mod-$lang.php")){
            
$cfgs self::$_CACHES_LG[$mod] = include $_fex;
        }elseif(
file_exists($_fex=DIR_IMCAT."/lang/$dir/$mod-$lang.php")){
            
$cfgs self::$_CACHES_LG[$mod] = include $_fex;
        }else{
            
$cfgs self::$_CACHES_LG[$mod] = array();
        }
        if(empty(
$key)) return $cfgs;
        return isset(
$cfgs[$key]) ? $cfgs[$key] : '{'."$mod.$key".'}';
    }

    
// {linc(file.part)} <大段文本>
    
static function inc($file$part=''$uarr=array()){
        global 
$_cbase;
        
$lang $_cbase['sys']['lang'];
        
$flang DIR_IMCAT."/lang/ptinc/$file-$lang.php";
        include 
$flang
        if(isset(
$reinc[$part])){
            return 
$reinc[$part];
        }
    }    

    
// 字段从数组中选个语言键值
    
static function pick($key$vals=array()){
        global 
$_cbase;
        
$lang $_cbase['sys']['lang'];
        if(!
is_array($vals)){
            return 
$vals;
        }
        if(
$key && isset($vals[$key])){
            return 
$vals[$key];
        }elseif(isset(
$vals[$lang])){
            return 
$vals[$lang];
        }else{
            return 
reset($vals);
        }
    }    
    
    
// 前置处理: ucfg.lang, ucfg.skin ============================================= 

    // $_cbase['ucfg']['lang'] = '(auto)'; // (get)
    
static function auto(){
        global 
$_cbase
        
//if(empty($_cbase['ucfg']['lang'])) return;
        
if(!empty($_cbase['ucfg']['lang']) && strpos($_cbase['ucfg']['lang'],')')){ // (auto), (get)
            
$lang $_cbase['ucfg']['lang']=='(get)' basReq::val('lang') : comCookie::oget('lang');
            
$alang basEnv::serval('HTTP_ACCEPT_LANGUAGE');
            if(!empty(
$lang)){
                
$_cbase['sys']['lang'] = $lang;
            }elseif(empty(
$alang)){
                
$_cbase['sys']['lang'] = 'cn';
            }else{
                
$lang substr($alang02);
                
$_cbase['sys']['lang'] = $lang=='zh' 'cn' 'en';
            }
        }
        if(!empty(
$_cbase['ucfg']['skin']) && $_cbase['ucfg']['skin']=='(auto)'){
            
$skin comCookie::oget('skin');
            if(!empty(
$skin)){
                
$_cbase['sys']['skin'] = $skin;
                return;
            }
        } 
    }

    
// links
    
static function links($dir='',$cfgs=array()){
        
$vopcfg glbConfig::read('vopcfg','sy');
        
$langs = empty($cfgs) ? $vopcfg['langs'] : array();
        
$url PATH_ROOT."/plus/api/redir.php?lang:{key}";
        if(empty(
$dir)){
            
$tpl "<a href='$url' title='{title}'>{mini}</a>";
        }elseif(
strpos($dir,'</')){
            
$tpl str_replace('{url}',$url,$dir);
        }else{ 
// lang:cn:&recbl=redir
            
$url .= ":&recbk=$dir"
            
$tpl "<a href='$url' title='{title}'>{mini}</a>";
        }
        
$res '';
        foreach (
$langs as $key => $val) {
            
$res .= "\n".str_replace(array('{key}','{title}','{mini}'),array($key,$val[0],$val[1]),$tpl);
        }
        return 
$res;
    }    
    
// sopts
    
static function sopts($def='',$img=1){
        global 
$_cbase
        
$lang $_cbase['sys']['lang'];
        if(!empty(
$_cbase['ucfg']['lang']) && $_cbase['ucfg']['lang']=='(auto)'){
            
$ops "<option value=''> En<>中 </option>";
            
$ops .= basLang::links("<option value='{url}'>{title}</option>",array());
        }else{ 
// <!-- <>◇/↔/⇔/&#x21d4; <i>«»<i> -->
            
$cfgs glbConfig::read('vopcfg','sy'); 
            
$lname = empty($cfgs['langs'][$lang][0]) ? '' $cfgs['langs'][$lang][0];
            
$ops "<option value=''> {$lang} : $lname </option>";
        }
        
$img $img '<img src="'.PATH_VIEWS.'/base/assets/logo/imcat-40x.png" width="40" height="40">' '';
        echo 
"<p>$img<select id='locSetS' onchange='location.href=this.value;'>$ops</select></p>";
    }
    
// shead
    
static function shead($title){
        echo 
'<div class="header">';
        
basLang::sopts();
        echo 
"<h2 class='title'>$title</h2>";
        echo 
'</div>';
    }

    
// jimp
    
static function jimp($path,$base='root',$lang='(auto)',$injs=0){
        global 
$_cbase;
        if(
$lang=='(auto)'$lang $_cbase['sys']['lang']; 
        if(
$injs){
            
$pcfg comStore::cfgDirPath($base,'dir');
            
$p1 $path;
            
$p2 str_replace('.js',"-$lang.js",$path);
            
$d1 comFiles::get($pcfg.$p1);
            
$d2 comFiles::get($pcfg.$p2);
            echo 
"$d1\n\n//($lang)\n$d2";
        }else{
            
$url PATH_BASE."?ajax-comjs&act=1&exjs=$path&lang=$lang";
            echo 
basJscss::imp($url);
        }
    }

}