Phalcon使用多语言环境(切换中文/英文等)
lang类文件
namespace Utils;
use Phalcon\Http\Request;
use Phalcon\Translate\Adapter\NativeArray;
class Lang{
public static $langType = ['en','cn','hk'];
static public $load_langs_package = array();//已载入语言包列表
static public $langs = array();//已经载入的语言包本体
/**
* 获取当前语言
* @return StrinigTool
*/
public static function current()
{
//return 'cn';
$language = get_value($_COOKIE['lang'],0);
if($language){
return $language;
}elseif(!$language&&get_value($_GET['lang'],0)){
$language = get_value($_GET['lang'],0);
}else{
$request = new Request();
$language = strtolower($request->getBestLanguage());
if($language == 'zh_cn' || $language == 'zh' || $language=='cn'){
return 'cn';
}elseif($language=='en'){
return 'en';
}else{
return 'cn';
}
}
return $language;
}
/**
* 设置最合适的语言
* @param $lang
*/
public static function change($lang)
{
$_SESSION['lang'] = $lang ? $lang: 'cn';
}
/**
* 获取多语言解析类
* @return NativeArray
*/
public static function getObj($load_lang = array())
{
//如果没有传值并且 已经装载过语言包则直接返回装载的语言包
if(empty($load_lang) && !empty(self::$langs)){
return self::return_native(self::$langs);
}
//如果传入字符串则转换为数组
if(is_string($load_lang)){
$load_lang = array($load_lang);
}
//查看语言包是否已经载入
foreach ($load_lang AS $key => $lang){
if(in_array($load_lang, self::$load_langs_package)){
//如果已经载入则从新载入列表中删除
unset($load_lang);
}
}
//如果新载入列表为空,则新载入列表中的语言包已经全部载入过
//直接返回已有语言包
if(empty($load_lang)){
return self::return_native(self::$langs);
}
//使用的语言
$language = Lang::current();
$language_messages = array();
$messages = array();
foreach ($load_lang AS $file){
if(file_exists(APP_PATH."/languages/" . $language . "/" . $file . ".php")){
require APP_PATH."/languages/" . $language . "/" . $file . ".php";//语言包地址
}
self::$load_langs_package[] = $file;
//将新语言包放入已载入语言包列表中
//整合语言包
$language_messages = array_merge($language_messages, $messages);
}
self::$langs = array_merge(self::$langs,$language_messages);
return self::return_native(self::$langs);
}
public static function return_native($array){
return new NativeArray(
array(
"content" => $array
)
);;
}
public function getLangPackage(){
return self::$load_langs_package;
}
}
在控制器加载语言包
/**
* 加载语言包
* 直接将语言包名当作参数传递
* $param string lang1 语言包1,语言包2 逗号隔开
* .......
*/
public function lang_load()
{
$this->view->now_lang = Lang::current();
$param = func_get_args();//获取传入参数数量
if (!empty($param)) {
$this->t = Lang::getObj($param);
return $this->t;
}
return Null;
}
语言装换函数
可在视图页面直接用
/**
* 语言包函数
*/
function t($val)
{
$lang = Lang::getObj();
return $lang->_($val);
}