实现的效果:
代码:
一、php,获取客户端的语言设置,如果没有$_COOKIE和$_GET['lang']就通过$_SERVER['HTTP_ACCEPT_LANGUAGE'])自动适应。
if(isset($_GET['lang']) and in_array($_GET['lang'], array('zh','cht','en','ja','ko','es','ru','ar','fr','hi','pt','de'))){ define('NOW_LANG',$_GET['lang']); setcookie('lang', $_GET['lang'], NOW_TIME + 3153600,'/',domain); } else{ if(isset($_COOKIE['lang']) and in_array($_COOKIE['lang'], array('zh','cht','en','ja','ko','es','ru','ar','fr','hi','pt','de'))){ define('NOW_LANG',$_COOKIE['lang']); }else{ if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) and preg_match('/^([a-z-]+)/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches)){ $lang = strtolower($matches[1]); switch ($lang) { case 'zh-hk': case 'zh-mo': case 'zh-sg': case 'zh-tw': case 'zh-cht': define('NOW_LANG','cht'); setcookie('lang', 'cht', NOW_TIME + 3153600,'/',domain); break; case 'en': define('NOW_LANG','en'); setcookie('lang', 'en', NOW_TIME + 3153600,'/',domain); break; case 'jp': define('NOW_LANG','en'); setcookie('lang', 'en', NOW_TIME + 3153600,'/',domain); break; default: define('NOW_LANG','zh'); setcookie('lang', 'zh', NOW_TIME + 3153600,'/',domain); break; }}else{ define('NOW_LANG','zh'); }}}
二、自动翻译代码。
function fy_true($query,$from='zh',$to=NOW_LANG) { global $mk;static $ossClient='';$query=trim($query); if($from==$to or $query==''){return $query;} $md5=md5($from.'_'.$to.'_'.$query);$sha1=sha1($from.'_'.$to.'_'.$query); if(!$ossClient){$ossClient=require INDEX_PATH.'oss/samples/Common.php';} $doesExist=$ossClient->doesObjectExist('huaren-hk','fy/'.substr($md5,0,3).'/'.$sha1); if($doesExist){return $ossClient->getObject('huaren-hk','fy/'.substr($md5,0,3).'/'.$sha1); } if(($from=='zh' and $to=='cht')or($to=='zh' and $from=='cht')){$query2=$GLOBALS['mk']->convert($query,$to);} else{$query2=trim(translate2($query,$to));} if($query2){$ossClient->putObject('huaren-hk','fy/'.substr($md5,0,3).'/'.$sha1,$query2); return $query2;} return $query;}
简繁体采用$GLOBALS['mk']->convert
其它的采用translate2 调用googleAPI
缓存采用阿里云oss!$ossClient->doesObjectExist
三、模版{lag 历史上的今天}
实现:先对模版根据不同的语言进行编译,缓存后进行显示。这样的会翻译只要请求一次就够了!