前后端分离,多语言版本需要翻译接口,这些接口又是动态数据,所以做了一个有选择性的翻译接口数据
//获取用户菜单列表(多语言)
public function getUserNavigationList(){
$data = NavigationModel::getUserNavigationList();
$data = $this->getTree($data->toArray());
translate($data,['name']); //只翻译字段为name的值
$this->ajaxReturn(1,lang("获取数据成功"),$data);
}
/**
* @param $data 需要翻译的数组
* @param array $required 必须要翻译的字段
* @param array $filter 过滤的字段
* @return array
* //翻译处理
*/
function translate(&$data,$required=[],$filter=[]){
if(is_array($data)){
foreach($data as $k=>$v){
if(is_array($data[$k])){
$data[$k] = translate($v,$required,$filter);
}else{
if($required && $filter){
$common = array_intersect($required,$filter);
$real_required = array_diff($required,$common);
if(in_array($k,$real_required)){
if($v){
$data[$k] = lang($v);
}
}
}else if($required && !$filter){
if(in_array($k,$required)){
if($v){
$data[$k] = lang($v);
}
}
}else if($filter && !$required){
if(!in_array($k,$filter)){
if($v){
$data[$k] = lang($v);
}
}
}else{
if($v){
$data[$k] = lang($v);
}
}
}
}
return $data;
}
}