<?php 

function transtreatfile( $sourceFile,$objectFile="")
{
//$sourceFile="../index.html";
//$objectFile="../indexfr.html";
$lang="fr";
//$sourcePath="../../beidouace.com/";
//$objPath="../../beidouace.com/";
if($objectFile=="")$objectFile=$sourceFile;

	$handle = fopen( $sourceFile,"r");
	$body="<body>";
	$partstr="";
	$partstr0="";
	$deliStart="<";	//分界符的头
	$deliEnd=">";	//分界符的尾
	$strStart=0;
	$strEnd=0;
	$cutFlag='';
	$cutHtml='';
	$flagStart=0;
	$flagEnd=0;
	$outputStr="";
	
	

		// head 处理，<body> 前
		$partstr0 .=getNext($handle,4096,$body);  //读入，直到有 标签分界符
		$strLen=strpos( $partstr0, $body)+strlen($body);
		$cutHtml=substr( $partstr0,0,$strLen  );  // 获得html内容标志前的
		$cutHtmlTail=substr( $partstr0,$strLen  );  // 获得html内容标志后的
		
		//title keywords description
		$partstr = get2flag($cutHtml,"<title>","</title>");  // 附件到输出串上
		$partstr = get2flag($partstr,'<meta name="keywords" content="','" />');  // 附件到输出串上
		$partstr = get2flag($partstr,'<meta name="description" content="','" />');  // 附件到输出串上
		
		$outputStr.=$partstr;
		echo $outputStr;
		//end <body>
	$ifParse=true;
	
	while ($ifParse ) 
	{		
		// 标签内部处理
		$partstr0='';
		$partstr1='';
		$allFlagStr='';
		
		$flagStaPos=strpos($cutHtmlTail,$deliStart);
		
		if($flagStaPos===false)
		{
			$partstr0 =getNext($handle,4096,$deliStart); 
		}
		$allFlagStr=$cutHtmlTail.$partstr0;
		
		$flagEndPos=strpos($allFlagStr,$deliEnd);
		if($flagEndPos===false)
		{
			$partstr1 =getNext($handle,4096,$deliStart); 
		}
		
		$allFlagStr.=$partstr1;
		
		//echo $allFlagStr;
		
		$part3str = get2flag($allFlagStr,$deliStart,$deliEnd,false);
		//echo $part3str[0]."</br>";
		//echo $part3str[1]."</br>";
		//echo $part3str[2]."</br>";
		
		$flag2str1= get1flag($part3str[1], " ",false); //分解标签内容
		$flag2str11=strtolower(trim($flag2str1[0])); //标签的名称
		$flag2str12= $flag2str1[1] ;  //标签的名称后面的部分
		$ifInnerTrans=true;
		switch($flag2str11)
		{
			case "input"; 
				$flag2str12=transIfflag($flag2str12,'value="','"');		//翻译value内容
				$flag2str12=transIfflag($flag2str12,"value='","'");		//翻译value内容
			
			break;
			
			case "script";
			$ifInnerTrans=false;
			break;
			
			case "";
			break;
			
			default;
		}
		$flag2str12=transIfflag($flag2str12, 'title="','"' );		//翻译title内容
		$flag2str12=transIfflag($flag2str12, 'alt="','"' );		//翻译alt内容
		
		$flag2str12=transIfflag($flag2str12, "title='","'" );		//翻译title内容
		$flag2str12=transIfflag($flag2str12, "alt='","'" );		//翻译alt内容
		
		$this3part= $part3str[0].$flag2str11.$flag2str[0].$flag2str12.$deliEnd;
		$outputStr.=$this3part;
		echo $this3part;

		// 标签内部处理结束
		
		// 标签外部处理
		$endPart=substr($part3str[2],1); //获得结尾符后面的内容
		$partstr1 =getNext($handle,4096,$deliStart); 
		if($ifInnerTrans)
		{
			$part2str = get1flag($endPart.$partstr1,$deliStart); //翻译标签外的内容
		}
		else
		{
			
			$part2str = get1flag($endPart.$partstr1,$deliStart,false); //不翻译标签外的内容
		}
		echo $part2str[0];
		$outputStr.=$part2str[0];
		$cutHtmlTail=$part2str[1];
		//echo $cutHtmlTail;
		//echo "-------------".$cutHtmlTail;
		
		$flagEndPos=strpos($cutHtmlTail,$deliEnd);
		
		// 标签外部处理结束


		//echo $partstr;
	
		if(feof ($handle) && $flagEndPos===false ) //结束判断
		{$ifParse=false;}

		
	}
	//echo strlen($partstr);
	echo $cutHtmlTail;
	$outputStr.=$cutHtmlTail;
	fclose ($handle);

	writegeneralfile(  $objectFile,$outputStr); // write the 
	return true;	

}


/*
------------------------------------------------------
参数：
 

程序功能：看是否包含标志串，是的话，翻译定界符之间的内容
------------------------------------------------------
*/
function transIfflag($cutHtml,$deliStart,$deliEnd)
{
	$returnStr=$cutHtml;
	$flagPos=strpos( $cutHtml, $deliStart);
	if($flagPos!==false)
	{
		$returnStr = get2flag($cutHtml,$deliStart,$deliEnd);	 //翻译value内容
	}
		
	return $returnStr;
}
/*
------------------------------------------------------
参数：
返回数组： 翻译过的标签外部+最后部分

程序功能：根据前定界符分解成2串，或者返回需要翻译的串
------------------------------------------------------
*/
function get1flag($cutHtml,$deliStart,$ifTrans=true,$ifHtmlDeli=true)
{
	$strStrLen=strpos( $cutHtml, $deliStart);
	$Flagtrue=substr( $cutHtml,$strStrLen,2  ); 
	if($ifHtmlDeli && $Flagtrue=="< ")  //如果定界符后有空格，就不是 html 标签
	{
		$strStrLen=strpos( $cutHtml, $deliStart,$strStrLen+1);
	}
	
	$part1=substr( $cutHtml,0,$strStrLen  );  // 获得前半段内容
	$part2=substr( $cutHtml,$strStrLen );  // 获得后半段内容
	
	//不翻译的内容 
	/*
	$trimPart1=trim($part1);
	$atPos=strpos($trimPart1,"@");
	$dotPos=strpos($trimPart1,"@");
	if($atPos>1 && $dotPos>$atPos+1)  //邮件地址不翻译
	{$ifHtmlDeli=false}
	*/
	$trimPart1=trim($part1);
	$trimPart1=trim(str_replace($trimPart1,"&nbsp;",""));
	if($trimPart1=='')  //空格不翻译
	{$ifHtmlDeli=false;}

		
	if($ifTrans)
	{
		$transPart1= (trim($part1)==""?$part1:translateStr($part1)) ;
		$returnStr= array($transPart1,$part2 );
	}
	else
	{$returnStr=array($part1,$part2);}  //不翻译就返回数组
	
	
	return $returnStr;
	
}

/*
------------------------------------------------------
参数：
 

程序功能：根据前后定界符分解串，或者返回需要翻译的串
------------------------------------------------------
*/
function get2flag($cutHtml,$deliStart,$deliEnd,$ifTrans=true)
{
	$strStrLen=strpos( $cutHtml, $deliStart)+strlen($deliStart);
	$part1=substr( $cutHtml,0,$strStrLen  );  // 获得前半段内容
	$part2=substr( $cutHtml,$strStrLen );  // 获得后半段内容
	$strEndPos=strpos( $part2, $deliEnd);

	$partFlag=substr( $part2,0,$strEndPos  );  // 获得html内容
	$part3=substr( $part2,$strEndPos );  // 获得html内容
	if($ifTrans)
	{$returnStr=$part1.translateStr($partFlag).$part3;}
	else
	{$returnStr=array($part1,$partFlag,$part3);}  //不翻译就返回数组
	
	
	return $returnStr;

	
	
}
/*
------------------------------------------------------
参数：
$deliStart 分解符

程序功能：获取下一步份串
------------------------------------------------------
*/

function getNext($handle,$strlen=4096,$deliStart)
{
		$strStart=false;
		$partstr0='';
		$returnStr='';
		$i=1;
		while($i<=100&&  $strStart===false && !feof ($handle))
		{
 			$partstr0 =  fgets ($handle, $strlen);
		//	echo $i.":".$partstr0;
			$strStart=strpos( $partstr0, $deliStart);
			$returnStr.=$partstr0;
		//	echo "getNext:$i".$returnStr ;
			
			$i++;
 
		}
	return $returnStr ;		
}


/*
------------------------------------------------------
参数：
$filename 
$str  content str 的引用

程序功能：google 翻译字符串
------------------------------------------------------
*/
function  translateStr($str)
{
	
	return "<translate>".$str."</translate>";
}

?>