基于THINKPHP5的多语言扩展

<?php
namespace Language;
if (!defined(‘LANGUAGE_ROOT’)) {
define(‘LANGUAGE_ROOT’, dirname(__FILE__) . ‘/’);
}

/****
*
* 语言类使用方法,在对应的控制器 引用 use think\Controller;
* @author 陈奎宗
*
*/
class Language {

/**语言包目录*/
private $local;
/**缺省值语言包,如果不存在则引用对应的包数据,主要防止包更新了之后,其他语言的未更新上,或者是变量名不符的情况下,出现数据的丢失问题**/
private $default_local = ‘zh-cn’;
/**对应的模块名*/
private $module;
/**获取的数据集*/
private $data = array();
/**如果获取的数据结果不存在的时候,临时存储的默认数据结果*/
private $default_data = array();

/*****
* 语言扩展的初始化数据
* @param string $local 必填参数,否则使用简体中文
* @param string $module 必填参数,否则不知道使用哪一个语言模块包
*/
public function __construct($local = ‘zh-cn’,$module = ”) {
$this->local = $local;
$this->module = $module;
$this->data = $this->load($local);
}

/****
* 独立获取一个语言信息对应下标数组信息
* @param String $key
*/
public function get($key) {
if(isset($this->data[$key])){
return $this->data[$key];
} else {
$this->default_data = $this->load($this->default_local);
if(isset($this->default_data[$key])){
return $this->default_data[$key];
}
}
return $key;
}

/****
* 获取对应模块的全部语言数组信息
*/
public function all() {
if(!empty($this->data)){
return $this->data;
} else {
if(!empty($this->default_data)){
return $this->default_data;
}
return $this->load($this->default_local);
}
}

/****
* 加载语言包,需要一个本地化参数
* @param String $local
* @return multitype:
*/
private function load($local) {
$_ = array();
$file = LANGUAGE_ROOT . $local . ‘/’ . $this->module . ‘.php’;
if (is_file($file)) {
require($file);
}
$data = array();
return array_merge($data, $_);
}
}

假设我们有中文和英文两个语种
英文数据数组:
< ?php $_[‘nav’] = array( ‘title’=>’title’,
‘descirption’=>’description’,
‘body’=>’body’
);
$_[‘footer’] = array(
‘menu1’=>’menu1’,
‘menu2’=>’menu2’,
‘menu3’=>’menu3’,
‘menu4’=>’menu4’,
);
中文数据数组:
< ?php $_[‘nav’] = array( ‘title’=>’标题’,
‘descirption’=>’描述’,
‘body’=>’内容’
);
$_[‘footer’] = array(
‘menu1’=>’菜单1’,
‘menu2’=>’菜单2’,
‘menu3’=>’菜单3’,
‘menu4’=>’菜单4’,
);

THINKPHP5 多语言扩展

将目录文件解压到extend目录
然后在需要使用的控制器内
$language = new \language\Language(‘en-gb’,’exchange’);
dump($language->get(‘footer’));die();

 

git地址:https://gitee.com/qingxinzui/thinkphp5_multilingual_package

发表评论

电子邮件地址不会被公开。 必填项已用*标注