99 lines
3.2 KiB
PHP
99 lines
3.2 KiB
PHP
<?php
|
|
/**----------------------------------------------------+
|
|
* 服务端多语言版本处理
|
|
* @author whjing2012@gmail.com
|
|
+-----------------------------------------------------*/
|
|
|
|
// 给指定文件注入语言版本控制函数
|
|
function srv_infun($file, $is_next = false){
|
|
if(is_dir($file)){
|
|
fordir($file, __FUNCTION__, array($is_next), $is_next);
|
|
return;
|
|
}
|
|
if(!is_file($file) || !preg_match('/.*\.[eh]rl$/',$file) || is_filter($file)) return;
|
|
echo "doing ==> $file\n";
|
|
$str = read_file($file);
|
|
$pattern = array(
|
|
'/(?<!\?T\()(<<\".*\">>).*(?!->)/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 = "/(?<!\\?T\\()(${slashVal})(?!.*\->)/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\(<?<?\"(.*[\x{4e00}-\x{9fa5}]+.*)\">?>?\)/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);
|
|
}
|