$file\n"; $str = read_file($file); $pattern = array( '/(?>).*(?!->)/iuU' => 'srv_str_infun_add_T', '/(?<=\?T\()(\".*\")/iuU' => 'srv_str_infun_add_T' ); $saveFlag = 0; foreach($pattern as $patternKey => $callfun){ $tmpSaveFlag = 0; $tmpSaveFlag = srv_str_infun($str, $patternKey, $callfun); $saveFlag = $tmpSaveFlag + $saveFlag; } if($saveFlag) { save_file($file, $str); echo colorize("saved ==> $file\n"); } else echo colorize("skipped ==> $file\n"); } // 指定内容注入 function srv_str_infun(&$str, $pattern, $callfun){ preg_match_all($pattern, $str, $ret); $arr = array(); foreach($ret[1] as $v){ if(isset($arr[$v]) || !preg_match('/.*[\x{4e00}-\x{9fa5}]+.*/u', $v)) continue; $str = call_user_func_array($callfun, array($v, $str)); $arr[$v] = 1; // echo("===$v\n"); } return count($arr) > 0; } // 添加宏T function srv_str_infun_add_T($val, &$str){ // $str = str_replace($val, "?T(${val})", $str); $slashVal = str_replace("/", "\/", preg_quote($val)); $pattern = "/(?)/iuU"; /* echo "val:${val}\n"; */ /* echo "slashVal:${slashVal}\n"; */ /* echo "pattern:${pattern}\n"; */ $str = preg_replace($pattern, "?T(${val})", $str); return $str; } // 添加Erlang二进制标识<<>> function srv_str_infun_add_bin($val, &$str){ $slashVal = str_replace("/", "\/", preg_quote($val)); $pattern = "/(?<=\?T\()(${slashVal})(?!.*\->)/iuU"; /* echo "val:${val}\n"; */ /* echo "slashVal:${slashVal}\n"; */ /* echo "pattern:${pattern}\n"; */ $str = preg_replace($pattern, "<<${val}>>", $str); return $str; } // 获取语言版本信息 function srv_match($file, &$arr, $is_next = false){ if(is_dir($file)){ fordir($file, __FUNCTION__, array(&$arr, $is_next), $is_next); return; } echo("doing==>$file\n"); $str = read_file($file); preg_match_all('/\?T\(?>?\)/iuU', $str, $ret); foreach($ret[1] as $k => $v){ echo("srv_match==>$v\n"); $arr[trim($v)] = 1; } } // 导出翻译文件 function srv_lang($lang){ $all = get_file_array(LANG_DATA."/$lang/".LANG_DATA_ALL); $srv = get_file_array(LANG_DATA."/$lang/".LANG_DATA_SRV); $str = "%% 多语言版本\n\n"; $str .= "-module(lang).\n"; $str .= "-export([get/1]).\n"; foreach($srv as $k=>$v){ if(!isset($all[$k])) continue; $str .= "\nget(<<\"$k\">>) -> <<\"{$all[$k]}\">>;"; } $str .= "\nget(Str) when is_list(Str) -> ?MODULE:get(list_to_binary(Str));"; $str .= "\nget(Str) -> Str."; save_file(LANG_DATA."/$lang/".LANG_DATA_CONF_SRV, $str); }