Files
fc/server/tools/lang/lang_cli.php
T

121 lines
4.1 KiB
PHP
Raw Normal View History

2026-05-23 22:10:14 +08:00
<?php
/**----------------------------------------------------+
* 客户端多语言处理处理
* @author whjing2012@gmail.com
+-----------------------------------------------------*/
// 给指定文件注入语言版本控制函数
function cli_infun($file, $is_next = false){
if(is_dir($file)){
fordir($file, __FUNCTION__, array($is_next), $is_next);
return;
}
if(!is_file($file) || !preg_match('/.*\.lua$/',$file) || is_filter($file)) return;
if(preg_match('/.*(gm_data).*/', $file)) return;
echo("doing==>$file\n");
$str = read_file($file);
if(cli_str_infun($str)){
save_file($file, $str);
}
}
// 指定内容注入语言版本控制函数
function cli_str_infun(&$str){
$arr = array();
preg_match_all('/(?<!TI18N\\()(\".*\"|\'.*\'|\[\[[^\"\']*\]\])/iuU', $str, $ret);
foreach($ret[1] as $v){
if(isset($arr[$v]) || !preg_match('/.*[\x{4e00}-\x{9fa5}]+.*/u', $v)) continue;
$val = str_replace("/", "\/", preg_quote($v));
$pattern = "/(?<!TI18N\()(${val})/iuU";
$str = preg_replace($pattern, "TI18N(${v})", $str);
$arr[$v] = 1;
echo("===$v\n");
}
return count($arr) > 0;
}
// 获取配置语言版本信息
function cli_config_match($file, &$arr, $is_next = false){
if(is_dir($file)){
fordir($file, __FUNCTION__, array(&$arr, $is_next), $is_next);
return;
}
echo("doing_config==>$file\n");
$str = read_file($file);
preg_match_all('/(\"|\')([\"]*[\x{4e00}-\x{9fa5}]+[\"]*)\1/iuU', $str, $ret1);
preg_match_all('/\[\[([^\"\']*[\x{4e00}-\x{9fa5}]+[^\"\']*)\]\]/iuU', $str, $ret2);
$ret = array_merge($ret1[2], $ret2[1]);
foreach($ret as $k => $v){
echo("cli_config_match==>$v\n");
$arr[trim($v)] = 1;
}
}
// 获取语言版本信息
function cli_match_old($file, &$arr, $is_next = false){
if(is_dir($file)){
fordir($file, __FUNCTION__, array(&$arr, $is_next), $is_next);
return;
}
if (basename($file) == "language.lua") {
echo("doing==>$file\n");
$str = read_file($file);
preg_match_all('/[^\[](\"|\')([\"]*[\x{4e00}-\x{9fa5}]+[\"]*)\1/iuU', $str, $ret1);
preg_match_all('/\[\[(.*[\x{4e00}-\x{9fa5}]+.*)\]\]/iuU', $str, $ret2);
$ret = array_merge($ret1[2], $ret2[1]);
foreach($ret as $k => $v){
echo("cli_match==>$v\n");
$arr[trim($v)] = 1;
}
}
}
// 获取语言版本信息
function cli_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('/TI18N\((\"|\')(.*[\x{4e00}-\x{9fa5}]+.*)\1\)/iuU', $str, $ret1);
preg_match_all('/TI18N\(\[\[(.*[\x{4e00}-\x{9fa5}]+.*)\]\]\)/iuU', $str, $ret2);
$ret = array_merge($ret1[2], $ret2[1]);
foreach($ret as $k => $v){
echo("cli_match==>$v\n");
$arr[trim($v)] = 1;
}
}
// 导出翻译文件
function cli_lang2($lang){
$all = get_file_array(LANG_DATA."/$lang/".LANG_DATA_ALL);
$cli = get_file_array(LANG_DATA."/$lang/".LANG_DATA_CLI);
$str = "-- 多语言版本\n\nLang = function(s)";
foreach($cli as $k=>$v){
if(!isset($all[$k])) continue;
if($k == $all[$k]) continue;
$k = trim(str_replace("'", "\'", $k));
$v = trim(str_replace("'", "\'", $all[$k]));
$str .= "\nif s == '$k' then return '{$v}' end";
}
$str .= "\nreturn s\nend";
save_file(LANG_DATA."/$lang/".LANG_DATA_CONF_CLI, $str);
}
function cli_lang($lang){
$all = get_file_array(LANG_DATA."/$lang/".LANG_DATA_ALL);
$cli = get_file_array(LANG_DATA."/$lang/".LANG_DATA_CLI);
$str = "-- 多语言版本\n\nLang = {";
foreach($cli as $k=>$v){
if(!isset($all[$k])) continue;
if($k == $all[$k]) continue;
$new_k = trim(str_replace("'", "\'", $k));
$v = trim(str_replace("'", "\'", $all[$k]));
$k = $new_k;
$str .= "\n['$k']='{$v}',";
}
$str .= "\n}";
save_file(LANG_DATA."/$lang/".LANG_DATA_CONF_CLI, $str);
}